Example #1
0
 public function readPFD()
 {
     $taxes = ZP::getTaxes();
     // taxes
     $errors = [];
     $data = $this->getSheetData();
     $defaults = $this->defaults;
     $defaults->data = [];
     $defaults->delete = [];
     for ($i = 10; $i < count($data); $i++) {
         $hasErrors = false;
         $A = strcmp($data[$i]['A'], '') == 0 ? null : $data[$i]['A'];
         // key
         $B = trim($data[$i]['B']);
         // date
         $C = trim($data[$i]['C']);
         // receipt
         $D = trim($data[$i]['D']);
         // taxType
         $E = trim($data[$i]['E']);
         // taxCode
         $F = trim($data[$i]['F']);
         // agent fees
         $G = trim($data[$i]['G']);
         // amountZMK
         $H = trim($data[$i]['H']);
         // amountUSD
         $I = trim($data[$i]['I']);
         // startDate
         $J = trim($data[$i]['J']);
         // endDate
         $K = trim($data[$i]['K']);
         // comments
         $Y = trim($data[$i]['Y']);
         // receipt
         $Z = trim($data[$i]['Z']);
         // ref
         if (strcmp($F, 'Total') == 0) {
             //exit(json_encode(['success'=>false, 'errorssssssss']));
             if (count($errors) > 0 && count($errors) < 6) {
                 unset($defaults);
                 return ['success' => false, 'errors' => $errors];
             } else {
                 if (count($errors) >= 6) {
                     return ['success' => false, 'errors' => $errors, 'msg' => 'There are multiple errors in the submission.'];
                 } else {
                     if (count($defaults->data) > 0 || count($defaults->delete) > 0) {
                         //exit(json_encode(['success'=>false, 'data'=>$defaults, 'error'=>'error', 'receipts'=>$files]));
                         return ['success' => true, 'data' => $defaults];
                     }
                 }
             }
             unset($defaults);
             return ['success' => true, 'message' => 'Request completed successfully.'];
         } else {
             if (!is_null($A) && strlen($B) == 0 && strlen($C) == 0 && strlen($D) == 0 && strlen($E) == 0 && strlen($F) == 0 && strlen($G) == 0 && strlen($H) == 0 && strlen($I) == 0 && strlen($J) == 0 && strlen($K) == 0) {
                 array_push($defaults->delete, $A);
             } else {
                 if (strlen($B) != 0 || strlen($C) != 0 || strlen($D) != 0 || strlen($E) != 0 || strlen($F) != 0 || strlen($G) != 0 || strlen($H) != 0 || strlen($I) != 0 || strlen($J) != 0 || strlen($K) != 0) {
                     if (!\ZP\ZP::isDate($B, 'd/m/Y')) {
                         $errors['B' . $i] = 'Please input date in the format dd/mm/yyyy';
                         $hasErrors = true;
                     } else {
                         $B = preg_split('/[\\/-]/', $B);
                         $B = \ZP\ZP::FormatString('{0}-{1}-{2}', $B[2], $B[1], $B[0]);
                     }
                     if (strlen($C) == 0) {
                         $errors['C' . $i] = 'Please input a valid receipt number';
                         $hasErrors = true;
                     }
                     // validate tax code and tax type
                     $taxTypeID = call_user_func(function ($taxType, $taxCode, $taxes) {
                         foreach ($taxes as $tax) {
                             if ($tax->taxCode == $taxCode && strcasecmp($tax->taxType, $taxType) == 0) {
                                 return $tax->taxTypeID;
                             }
                         }
                         return false;
                     }, $D, $E, $taxes);
                     //exit(json_encode(['success'=>false, 'taxTypeID'=>$taxTypeID]));
                     if (!$taxTypeID) {
                         $errors['D' . $i] = 'Please input a valid tax type. Refer to the Tax Types sheet to get valid values.';
                         $errors['E' . $i] = 'Please input a valid tax code. Refer to the Tax Types sheet to get valid values.';
                         $hasErrors = true;
                     }
                     // validate agent fees
                     if (strlen($F) != 0 && !is_numeric($F)) {
                         $errors['F' . $i] = 'Please input a valid agent fee.';
                         $hasErrors = true;
                     }
                     if (!is_numeric($G)) {
                         $errors['G' . $i] = 'Please input a valid Kwacha amount';
                         $hasErrors = true;
                     }
                     if (!is_numeric($H)) {
                         $errors['H' . $i] = 'Please input a valid US Dollar amount';
                         $hasErrors = true;
                     }
                     if (!\ZP\ZP::isDate($I, 'd/m/Y')) {
                         $errors['I' . $i] = 'Please input date in the format dd/mm/yyyy';
                         if (!\ZP\ZP::isDate($J, 'd/m/Y')) {
                             $errors['J' . $i] = 'Please input date in the format dd/mm/yyyy';
                         }
                         $hasErrors = true;
                     } else {
                         if (!\ZP\ZP::isDate($J, 'd/m/Y')) {
                             $errors['J' . $i] = 'Please input date in the format dd/mm/yyyy';
                             $hasErrors = true;
                         } else {
                             $I = preg_split('/[\\/-]/', $I);
                             $I = \ZP\ZP::FormatString('{0}-{1}-{2}', $I[2], $I[1], $I[0]);
                             $J = preg_split('/[\\/-]/', $J);
                             $J = \ZP\ZP::FormatString('{0}-{1}-{2}', $J[2], $J[1], $J[0]);
                             // compare dates
                             $d1 = new \DateTime($I);
                             $d2 = new \DateTime($J);
                             $year = date('Y');
                             if (\ZP\ZP::isDateBefore($d1, $d2)) {
                                 $errors['J' . $i] = 'Please ensure the End Date is after the Start Date';
                             }
                             if (intval($year) < intval($d1->format('Y'))) {
                                 $errors['I' . $i] = "Please ensure the date for the current reporting period ({$year})";
                             }
                             if (intval($year) < intval($d2->format('Y'))) {
                                 $errors['J' . $i] = "Please ensure the date for the current reporting period ({$year})";
                             }
                         }
                     }
                     if (!$hasErrors) {
                         array_push($defaults->data, (object) array('key' => $A, 'date' => $B, 'receiptNumber' => $C, 'taxType' => $taxTypeID, 'taxCode' => $E, 'agent_fees' => $F, 'amount_zmk' => $G, 'amount_usd' => $H, 'periodStart' => $I, 'periodEnd' => $J, 'comments' => $K, 'receipt' => $Y, 'ref' => $Z));
                     }
                 }
             }
         }
     }
 }