Example #1
0
 public function createPFD()
 {
     $columns = ['Key' => 'A', 'Date' => 'B', 'Receipt Number' => 'C', 'Tax Kind/Type' => 'D', 'Tax Code' => 'E', 'Agent Fees' => 'F', 'Amount ZMW' => 'G', 'Amount USD' => 'H', 'Start Date' => 'I', 'End Date' => 'J', 'Comments' => 'K'];
     $template_name = 'Payment Flow Details';
     $this->phpExcelObject->getProperties()->setDescription($template_name . " Template.");
     $sheet = $this->getActiveSheet();
     $sheet->getProtection()->setInsertRows(false);
     $sheet->setTitle("Template");
     // write sheet defaults
     $this->writeDefaults($sheet, $template_name);
     // set columns
     foreach ($columns as $k => $v) {
         switch ($v) {
             case 'C':
                 $width = 20;
                 break;
             case 'D':
                 $width = 30;
                 break;
             case 'E':
                 $width = 10;
                 break;
             default:
                 $width = 20;
                 break;
         }
         $sheet->setCellValue($v . '9', $k);
         $sheet->getColumnDimension($v)->setWidth($width);
     }
     // style columns
     $this->styleColumns('A9:K9', $sheet);
     //exit(json_encode($this->report));
     // write data from report
     $row = 10;
     if (!is_null($this->report)) {
         //$sheet->setCellValue('A'.$row, 2);
         foreach ($this->report as $obj) {
             //exit(json_encode($obj));
             $sheet->setCellValue('A' . $row, $obj->Key);
             $sheet->setCellValue('B' . $row, $this->dateToDD_MM_YYYYY($obj->date));
             $sheet->setCellValue('C' . $row, $obj->receiptNumber);
             $sheet->setCellValue('D' . $row, $obj->taxKind);
             $sheet->setCellValue('E' . $row, $obj->taxCode);
             $sheet->setCellValue('F' . $row, $obj->agent_fees);
             $sheet->setCellValue('G' . $row, $obj->amount_zmk);
             $sheet->setCellValue('H' . $row, $obj->amount_usd);
             $sheet->setCellValue('I' . $row, $this->dateToDD_MM_YYYYY($obj->periodStart));
             $sheet->setCellValue('J' . $row, $this->dateToDD_MM_YYYYY($obj->periodEnd));
             $sheet->setCellValue('K' . $row, $obj->comments);
             $sheet->setCellValue('Y' . $row, $obj->receipt);
             $sheet->setCellValue('Z' . $row, $obj->ref);
             $row += 1;
         }
     }
     // hide receipt and ref columns
     $sheet->getColumnDimension('Y')->setVisible(false);
     // hide first column
     $sheet->getColumnDimension('Z')->setVisible(false);
     // hide first column
     // add totals row
     $row = $row > 30 ? $row : 35;
     $sheet->setCellValue('F' . $row, 'Total');
     $sheet->setCellValue('G' . $row, ZP::FormatString('=SUM(G10:G{0})', $row - 1));
     $sheet->setCellValue('H' . $row, ZP::FormatString('=SUM(H10:H{0})', $row - 1));
     $fill = $sheet->getStyle(ZP::FormatString("A{0}:J{1}", $row, $row))->getFill();
     $fill->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
     $fill->getStartColor()->setARGB('FFFF00');
     //\PHPExcel_Style_Color::COLOR_BLUE);
     $fill->getEndColor()->setARGB('FFFF00');
     $this->formatCellValue(ZP::FormatString("A{0}:J{1}", $row, $row));
     // unprotect editable cells of the sheet
     $sheet->getStyle('B10:X' . ($row - 1))->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
     // format cell value as text
     $this->formatCellValue('B10:J' . ($row - 1), 'text');
     // format amount as number
     $this->formatCellValue('F10:H' . ($row - 1));
     // write sign off
     $this->signOff(1, $row + 5);
     $this->setActiveSheet(1);
     $sheet = $this->getActiveSheet();
     $sheet->setTitle("Tax Types");
     $taxes = ZP::getTaxes();
     $sheet->setCellValue("B2", "Ref");
     $sheet->getColumnDimension("B")->setWidth(10);
     $sheet->setCellValue("C2", "Tax Kind/Type");
     $sheet->getColumnDimension("C")->setWidth(80);
     $sheet->setCellValue("D2", "Tax Code");
     $sheet->getColumnDimension("D")->setWidth(20);
     $this->styleColumns('B2:D2', $sheet);
     $groupName = "";
     $row = 3;
     foreach ($taxes as $tax) {
         if (strcmp($groupName, $tax->groupName) != 0) {
             // write group name
             $sheet->setCellValue("B" . $row, $tax->groupName);
             $sheet->mergeCells(ZP::FormatString("B{0}:D{1}", $row, $row));
             $style = $sheet->getStyle(ZP::FormatString("B{0}:D{1}", $row, $row));
             $fill = $style->getFill();
             $fill->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
             $fill->getStartColor()->setARGB('00366498');
             $fill->getEndColor()->setARGB('00366498');
             $style->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_WHITE);
             $groupName = $tax->groupName;
             $row++;
             // write tax
             $sheet->setCellValue("B" . $row, $tax->taxTypeID);
             // write reference/taxTypeID
             $sheet->getStyle("B" . $row)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $sheet->setCellValue("C" . $row, $tax->taxType);
             // write tax type
             $sheet->setCellValue("D" . $row, $tax->taxCode);
             // write tax code
             $row++;
         } else {
             // write tax
             $sheet->setCellValue("B" . $row, $tax->taxTypeID);
             // write reference/taxTypeID
             $sheet->getStyle("B" . $row)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $sheet->setCellValue("C" . $row, $tax->taxType);
             // write tax type
             $sheet->setCellValue("D" . $row, $tax->taxCode);
             // write tax code
             $row++;
         }
     }
     $this->setActiveSheet(0);
     //$sheet->getCell('B10:B510')->setValueExplicit('10', \PHPExcel_Cell_DataType::TYPE_STRING);
     $this->outputTemplate($template_name);
 }
Example #2
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));
                     }
                 }
             }
         }
     }
 }