111 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace frontend\modules\api\controllers;
 | |
| 
 | |
| use common\models\Document;
 | |
| use common\models\DocumentFieldValue;
 | |
| use common\services\DocumentService;
 | |
| use Yii;
 | |
| use yii\web\BadRequestHttpException;
 | |
| use yii\web\NotFoundHttpException;
 | |
| use yii\web\ServerErrorHttpException;
 | |
| 
 | |
| class DocumentController extends ApiController
 | |
| {
 | |
| 
 | |
|     public function verbs(): array
 | |
|     {
 | |
|         return [
 | |
|             'get-document-list' => ['get'],
 | |
|             'get-document' => ['get'],
 | |
|             'create-document' => ['post'],
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @throws NotFoundHttpException
 | |
|      */
 | |
|     public function actionGetDocumentList($document_type = null): array
 | |
|     {
 | |
|         $documents = DocumentService::getDocumentList($document_type);
 | |
| 
 | |
|         if(empty($documents)) {
 | |
|             throw new NotFoundHttpException('Documents not found');
 | |
|         }
 | |
| 
 | |
|         return $documents;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @throws NotFoundHttpException
 | |
|      */
 | |
|     public function actionGetDocument($document_id): array
 | |
|     {
 | |
|         if(empty($document_id) or !is_numeric($document_id))
 | |
|         {
 | |
|             throw new NotFoundHttpException('Incorrect document ID');
 | |
|         }
 | |
| 
 | |
|         $document = DocumentService::getDocument($document_id);
 | |
| 
 | |
|         if(empty($document)) {
 | |
|             throw new NotFoundHttpException('There is no such document');
 | |
|         }
 | |
| 
 | |
|         return $document;
 | |
|     }
 | |
| 
 | |
|     public function actionCreateDocument()
 | |
|     {
 | |
|         $document = Yii::$app->getRequest()->getBodyParams();
 | |
|         $documentFieldValues = $document['documentFieldValues'];
 | |
| 
 | |
|         $modelDocument = new Document();
 | |
|         if ($modelDocument->load($document, '') && $modelDocument->save()) {
 | |
| 
 | |
|             try {
 | |
|                 $this->createDocimentFields($documentFieldValues, $modelDocument->id, $modelDocument->template_id);
 | |
|             }
 | |
|             catch (ServerErrorHttpException $e) {
 | |
|                 $modelDocument->delete();
 | |
|                 throw new BadRequestHttpException(json_encode($e->getMessage()));
 | |
|             }
 | |
|         }
 | |
|         else {
 | |
|             throw new BadRequestHttpException(json_encode($modelDocument->errors));
 | |
|         }
 | |
| 
 | |
|         Yii::$app->getResponse()->setStatusCode(201);
 | |
|         return  DocumentService::getDocument($modelDocument->id);
 | |
|     }
 | |
| 
 | |
|     private function createDocimentFields($documentFieldValues , $document_id, $template_id)
 | |
|     {
 | |
|         if (!empty($documentFieldValues)) {
 | |
| 
 | |
|             $modelFieldsArray = array();
 | |
| 
 | |
|             foreach ($documentFieldValues as $docFieldValue) {
 | |
|                 $tmpModelField = new DocumentFieldValue();
 | |
| 
 | |
|                 if ($tmpModelField->load($docFieldValue, '')) {
 | |
|                     $modelFieldsArray[] = $tmpModelField;
 | |
|                 }
 | |
|                 else {
 | |
|                     throw new ServerErrorHttpException(
 | |
|                         'Failed to load document field value where modelField: field_id=' . $tmpModelField->field_id . ' value=' . $tmpModelField->value);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             foreach ($modelFieldsArray as $modelField) {
 | |
| 
 | |
|                 $modelField->document_id = $document_id;
 | |
|                 if (!$modelField->save()) {
 | |
|                     throw new ServerErrorHttpException(
 | |
|                         'Failed to save document field value where modelField: field_id=' . $modelField->field_id . ' value=' . $modelField->value);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
