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)); } } } } } }