/**
  * Upload Pdf to s3 and create contracts
  *
  * @param $key
  */
 public function uploadPdfToS3AndCreateContracts($key)
 {
     $contracts = $this->getJsonData($key);
     foreach ($contracts as $contract) {
         $this->updateContractJsonByID($key, $contract->id, ['create_status' => static::CREATE_PROCESSING], 2);
         try {
             $this->storage->disk('s3')->put($contract->file, $this->filesystem->get($this->getFilePath($key, $contract->file)));
         } catch (Exception $e) {
             $this->logger->error(sprintf('File could not be uploaded : %s', $e->getMessage()));
             continue;
         }
         $data = ['file' => $contract->file, 'filehash' => $contract->filehash, 'user_id' => $contract->user_id, 'metadata' => $contract->metadata];
         try {
             $con = $this->contract->save($data);
             $this->logger->activity('contract.log.save', ['contract' => $con->id], $con->id, $con->user_id);
             $this->updateContractJsonByID($key, $contract->id, ['create_status' => static::CREATE_COMPLETED], 2);
             if ($con) {
                 $this->queue->push('App\\Nrgi\\Services\\Queue\\ProcessDocumentQueue', ['contract_id' => $con->id]);
             }
             $this->logger->info('Contract successfully created.', ['Contract Title' => $con->title]);
         } catch (Exception $e) {
             $this->logger->error($e->getMessage());
             if ($this->storage->disk('s3')->exists($contract->file)) {
                 $this->storage->disk('s3')->delete($contract->file);
             }
             $this->updateContractJsonByID($key, $contract->id, ['create_remarks' => trans('contract.save_fail'), 'create_status' => static::CREATE_FAILED], 2);
         }
         $this->deleteFile($key, $contract->file);
     }
 }
 /**
  * Get Unique Resources
  *
  * @return array
  */
 public function getUniqueResources()
 {
     $resources = $this->contract->getUniqueResources();
     $data = [];
     foreach ($resources as $re) {
         $data[$re['resource']] = $re['resource'];
     }
     asort($data);
     return $data;
 }
 /**
  * Get the supporting Contracts
  *
  * @param $id
  * @return array
  */
 public function getSupportingDocuments($id)
 {
     $supportingContracts = $this->contract->getSupportingDocument($id);
     if (empty($supportingContracts)) {
         return [];
     }
     $contractsId = [];
     foreach ($supportingContracts as $contractId) {
         array_push($contractsId, $contractId['supporting_contract_id']);
     }
     $contracts = $this->getcontracts($contractsId);
     return $contracts;
 }
 /**
  * Return the status count of OCR status
  *
  * @return array
  */
 public function getOcrStatusCount()
 {
     $ocrDefault = ['acceptable' => 0, 'editing' => 0, 'transcription' => 0, 'non' => 0];
     $ocrRaw = $this->contract->statusCount('textType');
     $ocrStatusCount = [];
     foreach ($ocrRaw as $ocr) {
         if ($ocr['status'] == "") {
             $ocr['status'] = "non";
         }
         if ($ocr['status'] == 1) {
             $ocr['status'] = "acceptable";
         }
         if ($ocr['status'] == 2) {
             $ocr['status'] = "editing";
         }
         if ($ocr['status'] == 3) {
             $ocr['status'] = "transcription";
         }
         $ocrStatusCount[$ocr['status']] = $ocr['count'];
     }
     return array_merge($ocrDefault, $ocrStatusCount);
 }
 /**
  * Get the total contract count
  *
  * @return int
  */
 public function getTotalContractCount()
 {
     return $this->contract->getTotalContractCount();
 }