From d08ade39525c31ae80c65a78508a0e0014479f7f Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 1 Oct 2020 10:57:48 +0000 Subject: [PATCH 1/4] Redo the pdf form. #515 --- .../JobOrderHandler/CMBJobOrderHandler.php | 295 +++++++----------- translations/messages.en.yaml | 7 +- 2 files changed, 126 insertions(+), 176 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 4760d286..ece0ff70 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -2150,7 +2150,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // translate the title and the logo for the pdf $translated_title = $translator->trans('jo_title_pdf'); - $translated_logo = $translator->trans('image_jo_pdf'); + // TODO: change the image file in messages.en.yaml to the correct logo + $translated_logo = $translator->trans('image_jo_pdf_century_logo'); $translated_delivery_instructions_label = $translator->trans('delivery_instructions_label'); // generate the pdf @@ -2182,109 +2183,138 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // insert JO number $pdf->SetFont($font_face, 'B', $jo_font_size); $pdf->SetX($col2_x); - $pdf->Cell($label_width, $jo_line_height, 'JO Number:'); + $pdf->Cell($label_width, $jo_line_height, 'JO NO:'); $pdf->SetTextColor(9, 65, 150); $pdf->Cell(0, $jo_line_height, $obj->getID()); + $pdf->Ln(); + + // insert date + $pdf->setX($col2_x); + $str_date_create = $obj->getDateCreate()->format('d/m/y'); + $pdf->SetFont($font_face, 'B', $jo_font_size); + $pdf->SetTextColor(0, 0, 0); + $pdf->Cell($label_width, $jo_line_height, 'JO Date:'); + $pdf->SetTextColor(9, 65, 150); + $pdf->Cell(0, $jo_line_height, $str_date_create); + + // insert company name + $pdf->Ln($line_height * 4); + $pdf->SetFont($font_face, 'B', $body_font_size); + $pdf->SetTextColor(0, 0, 0); + $pdf->SetX($col1_x); + $pdf->Cell(0, $jo_line_height, $translator->trans('pdf_company_name')); + + // insert company address + $pdf->Ln($line_height); + $pdf->SetFont($font_face, '', $body_font_size); + $pdf->SetTextColor(0, 0, 0); + $pdf->SetX($col1_x); + $pdf->Cell(0, $jo_line_height, $translator->trans('pdf_company_address')); + + // insert company numbers and email + $pdf->Ln($line_height); + $pdf->SetFont($font_face, '', $body_font_size); + $pdf->SetTextColor(0, 0, 0); + $pdf->SetX($col1_x); + $pdf->Cell(0, $jo_line_height, $translator->trans('pdf_company_number_email')); + + // insert INVOICE header + $pdf->Ln($line_height * 3); + $pdf->SetFont($font_face, 'BU', $jo_font_size); + $pdf->MultiCell(0 , $jo_line_height, 'INVOICE', 0, 'C'); + + // insert customer details header + $pdf->SetFont($font_face, 'B', $body_font_size); + $pdf->SetTextColor(0, 0, 0); + $pdf->SetX($col1_x); + $pdf->Cell(0, $jo_line_height, $translator->trans('pdf_customer_details_header')); + + $pdf->Ln($line_height * 2); + // insert customer info $customer = $obj->getCustomer(); $pdf->SetFont($font_face, '', $body_font_size); $pdf->SetTextColor(0, 0, 0); - $pdf->Ln($line_height * 7); - // get current Y $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); $pdf->Cell($label_width, $line_height, 'Customer Name:'); - $pdf->MultiCell($val_width, $line_height, $customer ? $customer->getFirstName() . ' ' . $customer->getLastName() : '', 0, 'L'); + $pdf->MultiCell($val_width, $line_height, $customer ? strtoupper($customer->getFirstName()) . ' ' . strtoupper($customer->getLastName()) : '', 0, 'L'); - // get Y after left cell - $y1 = $pdf->GetY(); + // get current Y + $y = $pdf->GetY(); - $pdf->SetXY($col2_x, $y); + $pdf->SetXY($col1_x, $y); $pdf->Cell($label_width, $line_height, 'Mobile Phone:'); $pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneMobile() ? $this->country_code . $customer->getPhoneMobile() : '', 0, 'L'); - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); - $pdf->Cell($label_width, $line_height, 'Delivery Date:'); - $pdf->MultiCell($val_width, $line_height, $obj->getDateSchedule() ? $obj->getDateSchedule()->format("m/d/Y") : '', 0, 'left'); + $pdf->Cell($label_width, $line_height, 'Second Number:'); + $pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneMobile() ? $this->country_code . $customer->getPhoneLandline() : '', 0, 'L'); - // get Y after left cell - $y1 = $pdf->GetY(); - - $pdf->SetXY($col2_x, $y); - $pdf->Cell($label_width, $line_height, 'Landline:'); - $pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneLandline() ? $this->country_code . $customer->getPhoneLandline() : '', 0, 'L'); - - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); - - $pdf->SetXY($col2_x, $y); - $pdf->Cell($label_width, $line_height, 'Office Phone:'); - $pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneOffice() ? $this->country_code . $customer->getPhoneOffice() : '', 0, 'L'); - - $pdf->SetX($col2_x); - $pdf->Cell($label_width, $line_height, 'Fax:'); - $pdf->MultiCell($val_width, $line_height, $customer && $customer->getPhoneFax() ? $this->country_code . $customer->getPhoneFax() : '', 0, 'L'); + // get current Y + $y = $pdf->GetY(); // insert vehicle info $cv = $obj->getCustomerVehicle(); $vehicle = $cv->getVehicle(); - $pdf->Ln(); - $pdf->SetFont($font_face, 'B', $header_font_size); - $pdf->Cell($label_width, $line_height, 'Vehicle Details'); - $pdf->Ln($line_height * 2); - - // get current Y - $y = $pdf->GetY(); - - $pdf->SetFont($font_face, '', $body_font_size); + $pdf->SetXY($col1_x, $y); $pdf->Cell($label_width, $line_height, 'Plate Number:'); - $pdf->MultiCell($val_width, $line_height, $cv ? $cv->getPlateNumber() : '', 0, 'L'); + $pdf->MultiCell(0, $line_height, $cv ? $cv->getPlateNumber() : '', 0, 'L'); - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); $pdf->Cell($label_width, $line_height, 'Brand:'); - $pdf->MultiCell($val_width, $line_height, $vehicle && $vehicle->getManufacturer() ? $vehicle->getManufacturer()->getName() : '', 0, 'L'); + $pdf->MultiCell($val_width, $line_height, $vehicle && $vehicle->getManufacturer() ? strtoupper($vehicle->getManufacturer()->getName()) : '', 0, 'L'); - // get Y after left cell - $y1 = $pdf->GetY(); - - $pdf->SetXY($col2_x, $y); - $pdf->Cell($label_width, $line_height, 'Model / Year:'); - $pdf->MultiCell(0, $line_height, $cv ? $cv->getModelYear() : '', 0, 'L'); - - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); $pdf->Cell($label_width, $line_height, 'Make:'); - $pdf->MultiCell($val_width, $line_height, $vehicle ? $vehicle->getMake() : '', 0, 'L'); + $pdf->MultiCell($val_width, $line_height, $vehicle ? strtoupper($vehicle->getMake()) : '', 0, 'L'); - // insert battery info + // get current Y + $y = $pdf->GetY(); + + $pdf->SetXY($col1_x, $y); + $pdf->Cell($label_width, $line_height, 'Model / Year:'); + $pdf->MultiCell(0, $line_height, $cv ? $cv->getModelYear() : '', 0, 'L'); + + // get current Y + $y = $pdf->GetY(); + + $pdf->SetXY($col1_x, $y); + $pdf->Cell($label_width, $line_height, 'Delivery Address:'); + $pdf->MultiCell($val_width, $line_height, strtoupper($obj->getDeliveryAddress()), 0, 'L'); + + + // insert Other Details $battery = $cv->getCurrentBattery(); $pdf->Ln(); $pdf->SetFont($font_face, 'B', $header_font_size); - $pdf->Cell($label_width, $line_height, 'Battery Details'); + $pdf->Cell($label_width, $line_height, 'Other Details'); + $pdf->Ln($line_height); + $pdf->SetFont($font_face, '', $body_font_size); + + // get current Y + $y = $pdf->GetY(); + + $pdf->setXY($col1_x, $y); + $pdf->Cell($label_width, $line_height, strtoupper($obj->getDeliveryInstructions())); + + // insert invoice details + $pdf->Ln($line_height * 2); + $pdf->SetFont($font_face, 'B', $header_font_size); + $pdf->Cell($label_width, $line_height, 'Invoice Details'); $pdf->Ln($line_height * 2); $pdf->SetFont($font_face, '', $body_font_size); @@ -2292,101 +2322,29 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // get current Y $y = $pdf->GetY(); - $pdf->Cell($label_width, $line_height, 'Current Battery:'); - $pdf->MultiCell($val_width, $line_height, $battery && $battery->getManufacturer() && $battery->getModel() && $battery->getSize() ? $battery->getManufacturer()->getName() . ' ' . $battery->getModel()->getName() . ' ' . $battery->getSize()->getName() . ' (' . $battery->getProductCode() . ')' : '', 0, 'L'); + $pdf->Cell($label_width, $line_height, 'Transaction Type:'); + $pdf->MultiCell($val_width, $line_height, CMBServiceType::getName($obj->getServiceType()), 0, 'L'); - // get Y after left cell - $y1 = $pdf->GetY(); + // get current Y + $y = $pdf->GetY(); - $pdf->SetXY($col2_x, $y); - $pdf->Cell($label_width, $line_height, 'Serial Number:'); - $pdf->MultiCell(0, $line_height, $cv ? $cv->getWarrantyCode() : '', 0, 'L'); + $pdf->Cell($label_width, $line_height, 'OR Name:'); + $pdf->MultiCell($val_width, $line_height, $obj->getORName(), 0, 'L'); - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); - $pdf->Cell($label_width, $line_height, 'Wty. Exp. Date:'); - $pdf->MultiCell($val_width, $line_height, $cv && $cv->getWarrantyExpiration() ? $cv->getWarrantyExpiration()->format("d/m/Y") : '', 0, 'L'); - - // insert transaction details - $pdf->Ln(); - $pdf->SetFont($font_face, 'B', $header_font_size); - $pdf->Cell($label_width, $line_height, 'Transaction Details'); - $pdf->Ln($line_height * 2); - - $pdf->SetFont($font_face, '', $body_font_size); - - // get current Y - $y = $pdf->GetY(); - - $pdf->Cell($label_width, $line_height, 'Warranty Class:'); - $pdf->MultiCell($val_width, $line_height, CMBWarrantyClass::getName($obj->getWarrantyClass()), 0, 'L'); - - // get Y after left cell - $y1 = $pdf->GetY(); - - $pdf->SetXY($col2_x, $y); $pdf->Cell($label_width, $line_height, 'Mode of Payment:'); $pdf->MultiCell(0, $line_height, CMBModeOfPayment::getName($obj->getModeOfPayment()), 0, 'L'); - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); - - $pdf->Cell($label_width, $line_height, 'Delivery Address:'); - $pdf->MultiCell($val_width, $line_height, $obj->getDeliveryAddress(), 0, 'L'); - - // get Y after left cell - $y1 = $pdf->GetY(); - - $pdf->SetXY($col2_x, $y); - $pdf->Cell($label_width, $line_height, 'Landmark:'); - $pdf->MultiCell(0, $line_height, $obj->getLandMark(), 0, 'L'); - - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); - $pdf->Cell($label_width, $line_height, 'Dispatch Time:'); - $pdf->MultiCell($val_width, $line_height, $obj->getDateSchedule() ? $obj->getDateSchedule()->format("g:i A") : '', 0, 'L'); - - // get Y after left cell - $y1 = $pdf->GetY(); - - $pdf->SetXY($col2_x, $y); - $pdf->Cell($label_width, $line_height, 'Dispatched By:'); - $pdf->MultiCell(0, $line_height, $obj->getProcessedBy() ? $obj->getProcessedBy()->getFullName() : '', 0, 'L'); - - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); - - // insert delivery instructions - $pdf->SetY($y); - $pdf->Ln(); - $pdf->SetFont($font_face, 'B', $header_font_size); - $pdf->Cell(0, $line_height, $translated_delivery_instructions_label); - $pdf->Ln(); - - $pdf->SetFont($font_face, '', $body_font_size); - $pdf->MultiCell(0, $line_height, $obj->getDeliveryInstructions(), 1, 'L'); - - // insert invoice details - $pdf->Ln(); - $pdf->SetFont($font_face, 'B', $header_font_size); - $pdf->Cell($label_width, $line_height, 'Invoice Details'); - $pdf->Ln(); + $pdf->Cell($label_width, $line_height, 'Credit Card No:'); + // TODO: insert boxes here + $pdf->MultiCell($val_width, $line_height, 'INSERT BOXES HERE', 0, 'L'); // invoice table headers $invoice = $obj->getInvoice(); @@ -2419,30 +2377,20 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $y = $pdf->GetY(); // insert invoice footer details - $pdf->Cell($label_width, $line_height, 'Transaction Type:'); - $pdf->MultiCell($val_width, $line_height, CMBServiceType::getName($obj->getServiceType()), 0, 'L'); + $pdf->Cell($label_width, $line_height, 'Dispatched by:'); + $pdf->MultiCell(0, $line_height, $obj->getProcessedBy() ? $obj->getProcessedBy()->getFullName() : '', 0, 'L'); - // get Y after left cell - $y1 = $pdf->GetY(); - - $pdf->SetXY($col2_x, $y); - $pdf->SetFont($font_face, 'B'); - $pdf->Cell($label_width, $line_height, 'SUBTOTAL:'); - $pdf->SetFont($font_face, ''); - $pdf->MultiCell(0, $line_height, $invoice ? number_format($invoice->getVATExclusivePrice(), 2) : '', 0, 'R'); - - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); - $pdf->Cell($label_width, $line_height, 'OR Name:'); - $pdf->MultiCell($val_width, $line_height, $obj->getORName(), 0, 'L'); + $pdf->Cell($label_width, $line_height, 'JO Done by:'); + $pdf->MultiCell(0, $line_height, $obj->getRider() ? $obj->getRider()->getFullName() : '', 0, 'L'); // get Y after left cell - $y1 = $pdf->GetY(); + $y = $pdf->GetY(); + + // TODO: resume here $pdf->SetXY($col2_x, $y); $pdf->SetFont($font_face, 'B'); @@ -2450,11 +2398,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->SetFont($font_face, ''); $pdf->MultiCell(0, $line_height, $invoice ? number_format($invoice->getVAT(), 2) : '', 0, 'R'); - // get Y after right cell - $y2 = $pdf->GetY(); - - // get row height - $y = max($y1, $y2); + // get current Y + $y = $pdf->GetY(); $pdf->SetXY($col1_x, $y); $pdf->Cell($label_width, $line_height, 'Emp. ID/Card No./Ref. By:'); diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 1f269944..ce55e323 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -12,6 +12,10 @@ add_cust_vehicle_battery_info: This vehicle is using a Motolite battery jo_title_pdf: Res-Q for CMB Job Order country_code_prefix: '+60' delivery_instructions_label: 'Other Details' +pdf_company_name: ENTITY LOGISTICS SDN BHD(1045869-H) +pdf_company_address: 26/1 Lebuh Persekutuan 47301 Petaling Jaya Selangor +pdf_company_number_email: 'Tel: 03-7872 9072 E-Mail: enquiry@entitylogistic.com.my' +pdf_customer_details_header: Customers Details # images image_logo_login: /assets/images/black-text-logo-01.png @@ -19,7 +23,8 @@ icon_login: /assets/images/battery-assist-bm-logo-32x32.png icon_base_32x32: /assets/images/black-text-logo-01-32x32.png icon_base_16x16: /assets/images/black-text-logo-01-16x16.png image_dashboard: /assets/images/century_logo.png -image_jo_pdf: /public/assets/images/black-text-logo-01-115x115.png +image_jo_pdf_battery_assist_logo: /public/assets/images/battery-assist-bm-logo-edited.png +image_jo_pdf_century_logo: /public/assets/images/black-text-logo-01-115x115.png # default point for maps default_lat: 3.084216 From 8b63b963c07e05b9c88d4ee22d26b9bd060d766f Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 2 Oct 2020 07:36:46 +0000 Subject: [PATCH 2/4] Modify pdf form. #515 --- .../JobOrderHandler/CMBJobOrderHandler.php | 92 ++++++++++--------- translations/cmb.messages.en.yaml | 18 +++- translations/messages.en.yaml | 11 +++ 3 files changed, 76 insertions(+), 45 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index ece0ff70..3456d97f 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -2220,17 +2220,15 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Cell(0, $jo_line_height, $translator->trans('pdf_company_number_email')); // insert INVOICE header - $pdf->Ln($line_height * 3); + $pdf->Ln($line_height * 2); $pdf->SetFont($font_face, 'BU', $jo_font_size); $pdf->MultiCell(0 , $jo_line_height, 'INVOICE', 0, 'C'); // insert customer details header - $pdf->SetFont($font_face, 'B', $body_font_size); - $pdf->SetTextColor(0, 0, 0); - $pdf->SetX($col1_x); - $pdf->Cell(0, $jo_line_height, $translator->trans('pdf_customer_details_header')); - - $pdf->Ln($line_height * 2); + $pdf->SetFont($font_face, 'B', $header_font_size); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_customer_details_header')); + $pdf->Ln($line_height); + $pdf->SetFont($font_face, '', $body_font_size); // insert customer info $customer = $obj->getCustomer(); @@ -2315,8 +2313,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Ln($line_height * 2); $pdf->SetFont($font_face, 'B', $header_font_size); $pdf->Cell($label_width, $line_height, 'Invoice Details'); - $pdf->Ln($line_height * 2); - + $pdf->Ln($line_height); $pdf->SetFont($font_face, '', $body_font_size); // get current Y @@ -2365,16 +2362,17 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Cell($table_col_width * 2, $table_line_height, number_format($item->getPrice(), 2), 1, 0, 'R'); $pdf->Cell($table_col_width * 2, $table_line_height, number_format($item->getPrice() * $item->getQuantity(), 2), 1, 1, 'R'); } + $pdf->Cell($table_col_width * 6, $table_line_height, 'SubTotal', 1); + $pdf->Cell($table_col_width * 2, $table_line_height, '', 1, 0, 'R'); + $pdf->Cell($table_col_width * 2, $table_line_height, '', 1, 0, 'R'); + $pdf->Cell($table_col_width * 2, $table_line_height, number_format($invoice->getTotalPrice(), 2), 1, 1, 'R'); } else { $pdf->Cell($table_col_width * 12, 7, 'No items', 1, 1); } - $pdf->Ln($line_height * 2); - - // get current Y - $y = $pdf->GetY(); + $pdf->Ln($line_height); // insert invoice footer details $pdf->Cell($label_width, $line_height, 'Dispatched by:'); @@ -2387,48 +2385,54 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Cell($label_width, $line_height, 'JO Done by:'); $pdf->MultiCell(0, $line_height, $obj->getRider() ? $obj->getRider()->getFullName() : '', 0, 'L'); - // get Y after left cell - $y = $pdf->GetY(); - - // TODO: resume here - - $pdf->SetXY($col2_x, $y); - $pdf->SetFont($font_face, 'B'); - $pdf->Cell($label_width, $line_height, 'TAX:'); - $pdf->SetFont($font_face, ''); - $pdf->MultiCell(0, $line_height, $invoice ? number_format($invoice->getVAT(), 2) : '', 0, 'R'); - - // get current Y - $y = $pdf->GetY(); - - $pdf->SetXY($col1_x, $y); - $pdf->Cell($label_width, $line_height, 'Emp. ID/Card No./Ref. By:'); - $pdf->MultiCell($val_width, $line_height, $obj->getPromoDetail(), 0, 'L'); - // get Y after left cell $y1 = $pdf->GetY(); - $pdf->SetXY($col2_x, $y); - $pdf->SetFont($font_face, 'B'); - $pdf->Cell($label_width, $line_height, 'DISCOUNT:'); - $pdf->SetFont($font_face, ''); - $pdf->MultiCell(0, $line_height, $invoice ? number_format($invoice->getDiscount(), 2) : '', 0, 'R'); - // get Y after right cell $y2 = $pdf->GetY(); - // get row height $y = max($y1, $y2); - $pdf->SetXY($col1_x, $y); - $pdf->Cell($label_width, $line_height, 'Discount Type:'); - $pdf->MultiCell($val_width, $line_height, $invoice && $invoice->getPromo() ? $invoice->getPromo()->getName() : '', 0, 'L'); - + // insert the scan to pay $pdf->SetXY($col2_x, $y); $pdf->SetFont($font_face, 'B'); - $pdf->Cell($label_width, $line_height, 'FINAL AMOUNT:'); - $pdf->MultiCell(0, $line_height, $invoice ? number_format($invoice->getTotalPrice(), 2) : '', 0, 'R'); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_scan_to_pay')); + + // get Y after right cell + $y2 = $pdf->GetY(); + + $y = max($y1, $y2); + + // insert space here + $pdf->SetXY($col1_x, $y); + $pdf->Ln($line_height); + + // get Y after left cell + $y1 = $pdf->GetY(); + + $y = max($y1, $y2); + + // insert the footer text + $pdf->SetXY($col1_x, $y); $pdf->SetFont($font_face, ''); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_payments')); + + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_company_name')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_bank')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_return_policy')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_private_label')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_private_text')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_commercial_label')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_commercial_text')); + $pdf->Ln($line_height * 2); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_document')); $params['obj'] = $pdf; $params['filename'] = $filename; diff --git a/translations/cmb.messages.en.yaml b/translations/cmb.messages.en.yaml index 1f269944..1da85db5 100644 --- a/translations/cmb.messages.en.yaml +++ b/translations/cmb.messages.en.yaml @@ -12,6 +12,21 @@ add_cust_vehicle_battery_info: This vehicle is using a Motolite battery jo_title_pdf: Res-Q for CMB Job Order country_code_prefix: '+60' delivery_instructions_label: 'Other Details' +pdf_company_name: ENTITY LOGISTICS SDN BHD(1045869-H) +pdf_company_address: 26/1 Lebuh Persekutuan 47301 Petaling Jaya Selangor +pdf_company_number_email: 'Tel: 03-7872 9072 E-Mail: enquiry@entitylogistic.com.my' +pdf_customer_details_header: Customers Details +pdf_footer_scan_to_pay: Scan To Pay +pdf_footer_payments: 'Note: All payments are made payable to' +pdf_footer_company_name: Entity Logistic Sdn Bhd +pdf_footer_bank: 'Malayan Banking: 512307611410' +pdf_footer_return_policy: Goods Sold are not returnable or exchangeable +pdf_footer_warranty_private_label: 'Petrol vehicles / private use : -' +pdf_footer_warranty_private_text: 'Warranty 12 months + 6 months extended or 25,000 km (whichever + comes first) and on selected models' +pdf_footer_warranty_commercial_label: 'Diesel vehicles / commercial use : -' +pdf_footer_warranty_commercial_text: 'Warranty 6 months extended or 20,000 km (whichever comes first)' +pdf_footer_document: 'THIS IS A COMPUTER GENERATED DOCUMENT - NO SIGNATURE REQUIRED' # images image_logo_login: /assets/images/black-text-logo-01.png @@ -19,7 +34,8 @@ icon_login: /assets/images/battery-assist-bm-logo-32x32.png icon_base_32x32: /assets/images/black-text-logo-01-32x32.png icon_base_16x16: /assets/images/black-text-logo-01-16x16.png image_dashboard: /assets/images/century_logo.png -image_jo_pdf: /public/assets/images/black-text-logo-01-115x115.png +image_jo_pdf_battery_assist_logo: /public/assets/images/battery-assist-bm-logo-edited.png +image_jo_pdf_century_logo: /public/assets/images/black-text-logo-01-115x115.png # default point for maps default_lat: 3.084216 diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index ce55e323..1da85db5 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -16,6 +16,17 @@ pdf_company_name: ENTITY LOGISTICS SDN BHD(1045869-H) pdf_company_address: 26/1 Lebuh Persekutuan 47301 Petaling Jaya Selangor pdf_company_number_email: 'Tel: 03-7872 9072 E-Mail: enquiry@entitylogistic.com.my' pdf_customer_details_header: Customers Details +pdf_footer_scan_to_pay: Scan To Pay +pdf_footer_payments: 'Note: All payments are made payable to' +pdf_footer_company_name: Entity Logistic Sdn Bhd +pdf_footer_bank: 'Malayan Banking: 512307611410' +pdf_footer_return_policy: Goods Sold are not returnable or exchangeable +pdf_footer_warranty_private_label: 'Petrol vehicles / private use : -' +pdf_footer_warranty_private_text: 'Warranty 12 months + 6 months extended or 25,000 km (whichever + comes first) and on selected models' +pdf_footer_warranty_commercial_label: 'Diesel vehicles / commercial use : -' +pdf_footer_warranty_commercial_text: 'Warranty 6 months extended or 20,000 km (whichever comes first)' +pdf_footer_document: 'THIS IS A COMPUTER GENERATED DOCUMENT - NO SIGNATURE REQUIRED' # images image_logo_login: /assets/images/black-text-logo-01.png From 43aabbd5ee4f5bd5424936381c219e8e04ac105e Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 2 Oct 2020 10:19:06 +0000 Subject: [PATCH 3/4] Add placeholder images to pdf file. #515 --- .../110x110-qr-codes-logo-placeholder.png | Bin 0 -> 279 bytes .../images/pdf_images/120x120-qr-codes.png | Bin 0 -> 301 bytes .../275x100-century-logo-placeholder.png | Bin 0 -> 499 bytes .../275x125-century-logo-placeholder.png | Bin 0 -> 429 bytes .../275x75-century-logo-placeholder.png | Bin 0 -> 492 bytes .../275x90-century-logo-placeholder.png | Bin 0 -> 495 bytes .../JobOrderHandler/CMBJobOrderHandler.php | 41 ++++++++++++++++-- translations/cmb.messages.en.yaml | 11 +++-- translations/messages.en.yaml | 11 +++-- 9 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png create mode 100644 public/assets/images/pdf_images/120x120-qr-codes.png create mode 100644 public/assets/images/pdf_images/275x100-century-logo-placeholder.png create mode 100644 public/assets/images/pdf_images/275x125-century-logo-placeholder.png create mode 100644 public/assets/images/pdf_images/275x75-century-logo-placeholder.png create mode 100644 public/assets/images/pdf_images/275x90-century-logo-placeholder.png diff --git a/public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png b/public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..87bce404e0a22b76f2c2c2b4b136c97b2dabe682 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^c_7Tf3?xlTtxo_cl>na**E46%Oq(`s-@bi|7cZVO zXU_KR+gGhxwQ=LdqeqXfUAuPKvSph$Z=Sb%2_H~BXMsm#F#`kN5fEmas?8@26rAbl z;usRq`u6NbK1N58)`!{C&P>@oSBNv}q*&Cd+?5)FtwozUcSh$a%N(T$N*}-=vD>DHNcyNB^7U{6>59Hn7NbgO{f29`xMQW0YU4}(wTCwE&5NAo=%^9z= zzx~P<-`@Xj(Xy>mE-nl(-<-AP{hoI-OY{nFyf(cbQvG~U*V4707A*Uo6Il0+A86{I ZDbj&nQv9paRP2B}22WQ%mvv4FO#m+xb!z|s literal 0 HcmV?d00001 diff --git a/public/assets/images/pdf_images/120x120-qr-codes.png b/public/assets/images/pdf_images/120x120-qr-codes.png new file mode 100644 index 0000000000000000000000000000000000000000..5bfe29c856981c309a04483fbc06dc68c2837c3f GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#Q3?xr`X+H!~asfUeu4m4inKo_O#*G^nFJ8QA z)v7sj<{UkGbo=)0`}XbIxpSwVL#Pf=C1-(0WHAE+-w_aIoT|+y4HVq!>Eaj?(faoM zMy^8!BCQW+3oK4%;_B0NEbt4o-sXL9t*eG)v`b8MP2;tFJ1*{XDA0M%-NN&8XN(e1 zGY~{@CEwJXHUCZd>JQV>m8QKqUvc$BR`8`Mzb4-gPR`6uHHw?8sPOIbmUkMpyH57H zKeTuoZTIB8BKQ0?9)?Fh-F^K?-YMK^I-}uvpZCGf)vxDn)RVivo z?|;Za;@HRU8Jgxn4lgUV9y18*dc^UgTkyh>t8Be}?ic<_Eq-|Zn=NbeqX(BBeW>xc zx25F8^w*+FK$GF%NB^e$^i5H3?zTo+JD$39EqD>z-fL6WsJ_}TtI)5w$am&55&ghV zS|%pB#a_l2i|(j>yz^-0snE%$%E3^zL%o8uxv3+oNSPV{*0jl)08mEoRx=&;O7X zv5Y0=`csjAX?f?3R~;!^&$9CU_m+*u%S9HhEZG#XW_iWoAKRy7Y&1A@V`gyI;yb6c zc&BOp;q-X-%}h=pe%{2@AhlD1tgpKJA9U{$T5GpFV3GMY-T1P+UwgF5o=tJOoLo0^ z>)z?o(D=i%37^{e~)?$hI+X3iaHi?0SA l)&G*2GikpZ6Fjv3oVA|J7_jzKzD+Pl%+uA+Wt~$(69Do2X?_wfUrh=9zlBIEGZr zd3$lA{~-sFhL7c~Opmp~zJw5m^ zdbdcm;qT8=g6;ipPJ6uiNN>LSwp8;uiRZnZ*1hSI%G$Gi-^8pfeSb3&+x|}cZsgVN z>ACD*Olon`+FO%Iq75%gUySO}>`y!GLE*EM}rc)rGL5u0n< zf3?JYdep2L8Gk=I3LS~+=JxtIbME<9Ha1}grq8Yko7Jsc4)-DhL)T}%w@$iRZVR5> P0*QLM`njxgN@xNAm07sC literal 0 HcmV?d00001 diff --git a/public/assets/images/pdf_images/275x75-century-logo-placeholder.png b/public/assets/images/pdf_images/275x75-century-logo-placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..65e8c0d55af1c8affc40efc1ee2a015cb91a0dfb GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0y~yU=#+jy;+!no z?|;Za;@HRU8Jgxn4lgUV9y18*dc^UgTkyh>t8Be}?ic<_Eq-|Zo2@R}QHkk?KGk^K z+fwpk`fE`opve&M!~5G?pD^?4^29K|36pMDd0km>eb=O|F0x_9=Q91)XJtuQ^ki477&Cr?euHHF$qvCDA#5*_p=Q?J& zJa0{R)J%P9d!$5>S&}0;IBUvGp*F&-^2W8-)t6p<$U*=@T<;W!kXJlaF&;P_tC5_^PYO|PBCufp1G_`El%xSb4kJf zp}#}X_U+#qethbQQ3Z)lxwX=+ipwr&O2${qR-wJya(`|rzWh9NBhZ#va-UDHdAs+{ zjwvl>s;a+gX1+8z8=tmM=Xh*gTv^_QyPp<(dOSbx@ssQC_3Y>68@FVbMahN!>9y-E f{dCb|freFix;TbpG`_vE z-~W(<#IcXxGc?UFHC_5BkSw9?TFCO}C`ZPltY)|4$}j4AFMde>Jx{Fp&@H1MH6Hi2 zl)RY!T2u*WFcdV@EBq~0TYdCi?2N6#OH#__U0QXy+V`YF*zv1Vilr_`dzmh;*f`1D z*LgGFa+4%oby=bHx$`VFS$(hCa;5%N_S)*ZvN!6=rqxE)9CuzGshGP=X=k~F<>4b8 z@1)Pq2|9JEy6c5kn~}(|Wh_%>anHWA*nQ#iV;Aqu2zPDcE_&a($#}Vl`{d`pOYiYS zdYve>^?R5v_RVIgSIT#<89(acC9I3R1ZR1rpMF}^W!|-I>6U5U$~|)}ms*_KyY7;K z_d|b=qW$|nHvITBCq@+{KECep9!&z?6r7Y@H#@ag&dbp@ZEmrtLsUoPonBEP;*t8Srx h^5i>J9I(K${>WK-DqyV*&;3~-Ax~F7mvv4FO#pt8-!K3G literal 0 HcmV?d00001 diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 3456d97f..52f10248 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -2172,6 +2172,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $header_font_size = 9; $jo_font_size = 16; $col1_x = $margin; + $col_extra_x = 85; $col2_x = 120; $label_width = 40; $val_width = 60; @@ -2180,9 +2181,17 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $image_path = $proj_path . $translated_logo; $pdf->Image($image_path, $col1_x, 10); + $y = $pdf->GetY(); + + // insert number + $pdf->Ln($line_height); + $pdf->SetFont($font_face, 'B', $body_font_size); + $pdf->SetX($col_extra_x); + $pdf->Cell($label_width, $jo_line_height, '1800-22-8837'); + // insert JO number $pdf->SetFont($font_face, 'B', $jo_font_size); - $pdf->SetX($col2_x); + $pdf->SetXY($col2_x, $y); $pdf->Cell($label_width, $jo_line_height, 'JO NO:'); $pdf->SetTextColor(9, 65, 150); $pdf->Cell(0, $jo_line_height, $obj->getID()); @@ -2190,7 +2199,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Ln(); // insert date - $pdf->setX($col2_x); + $pdf->SetX($col2_x); $str_date_create = $obj->getDateCreate()->format('d/m/y'); $pdf->SetFont($font_face, 'B', $jo_font_size); $pdf->SetTextColor(0, 0, 0); @@ -2199,7 +2208,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Cell(0, $jo_line_height, $str_date_create); // insert company name - $pdf->Ln($line_height * 4); + $pdf->Ln($line_height * 2); $pdf->SetFont($font_face, 'B', $body_font_size); $pdf->SetTextColor(0, 0, 0); $pdf->SetX($col1_x); @@ -2407,6 +2416,28 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->SetXY($col1_x, $y); $pdf->Ln($line_height); + + // get Y after left cell + $y1 = $pdf->GetY(); + + $y = max($y1, $y2); + + // insert qr logos + $qr_logo_image_path_1 = $proj_path . $translator->trans('image_jo_pdf_qr_logo_1');; + $pdf->Image($qr_logo_image_path_1, $col2_x, $y, 25); + + $qr_logo_image_path_2 = $proj_path . $translator->trans('image_jo_pdf_qr_logo_2');; + $pdf->Image($qr_logo_image_path_2, $col2_x + 40, $y, 25); + + $y2 = $pdf->GetY(); + + // insert qr codes + $qr_code_image_path_1 = $proj_path . $translator->trans('image_jo_pdf_qr_code_1');; + $pdf->Image($qr_code_image_path_1, $col2_x, $y + 30, 25); + + $qr_code_image_path_2 = $proj_path . $translator->trans('image_jo_pdf_qr_code_2');; + $pdf->Image($qr_code_image_path_2, $col2_x + 40, $y + 30, 25); + // get Y after left cell $y1 = $pdf->GetY(); @@ -2426,7 +2457,9 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $pdf->Ln(); $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_private_label')); $pdf->Ln(); - $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_private_text')); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_private_text_1')); + $pdf->Ln(); + $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_private_text_2')); $pdf->Ln(); $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_warranty_commercial_label')); $pdf->Ln(); diff --git a/translations/cmb.messages.en.yaml b/translations/cmb.messages.en.yaml index 1da85db5..6c757d14 100644 --- a/translations/cmb.messages.en.yaml +++ b/translations/cmb.messages.en.yaml @@ -22,8 +22,8 @@ pdf_footer_company_name: Entity Logistic Sdn Bhd pdf_footer_bank: 'Malayan Banking: 512307611410' pdf_footer_return_policy: Goods Sold are not returnable or exchangeable pdf_footer_warranty_private_label: 'Petrol vehicles / private use : -' -pdf_footer_warranty_private_text: 'Warranty 12 months + 6 months extended or 25,000 km (whichever - comes first) and on selected models' +pdf_footer_warranty_private_text_1: 'Warranty 12 months + 6 months extended or 25,000 km (whichever' +pdf_footer_warranty_private_text_2: 'comes first) and on selected models' pdf_footer_warranty_commercial_label: 'Diesel vehicles / commercial use : -' pdf_footer_warranty_commercial_text: 'Warranty 6 months extended or 20,000 km (whichever comes first)' pdf_footer_document: 'THIS IS A COMPUTER GENERATED DOCUMENT - NO SIGNATURE REQUIRED' @@ -34,8 +34,11 @@ icon_login: /assets/images/battery-assist-bm-logo-32x32.png icon_base_32x32: /assets/images/black-text-logo-01-32x32.png icon_base_16x16: /assets/images/black-text-logo-01-16x16.png image_dashboard: /assets/images/century_logo.png -image_jo_pdf_battery_assist_logo: /public/assets/images/battery-assist-bm-logo-edited.png -image_jo_pdf_century_logo: /public/assets/images/black-text-logo-01-115x115.png +image_jo_pdf_century_logo: /public/assets/images/pdf_images/275x75-century-logo-placeholder.png +image_jo_pdf_qr_logo_1: /public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png +image_jo_pdf_qr_logo_2: /public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png +image_jo_pdf_qr_code_1: /public/assets/images/pdf_images/120x120-qr-codes.png +image_jo_pdf_qr_code_2: /public/assets/images/pdf_images/120x120-qr-codes.png # default point for maps default_lat: 3.084216 diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 1da85db5..6c757d14 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -22,8 +22,8 @@ pdf_footer_company_name: Entity Logistic Sdn Bhd pdf_footer_bank: 'Malayan Banking: 512307611410' pdf_footer_return_policy: Goods Sold are not returnable or exchangeable pdf_footer_warranty_private_label: 'Petrol vehicles / private use : -' -pdf_footer_warranty_private_text: 'Warranty 12 months + 6 months extended or 25,000 km (whichever - comes first) and on selected models' +pdf_footer_warranty_private_text_1: 'Warranty 12 months + 6 months extended or 25,000 km (whichever' +pdf_footer_warranty_private_text_2: 'comes first) and on selected models' pdf_footer_warranty_commercial_label: 'Diesel vehicles / commercial use : -' pdf_footer_warranty_commercial_text: 'Warranty 6 months extended or 20,000 km (whichever comes first)' pdf_footer_document: 'THIS IS A COMPUTER GENERATED DOCUMENT - NO SIGNATURE REQUIRED' @@ -34,8 +34,11 @@ icon_login: /assets/images/battery-assist-bm-logo-32x32.png icon_base_32x32: /assets/images/black-text-logo-01-32x32.png icon_base_16x16: /assets/images/black-text-logo-01-16x16.png image_dashboard: /assets/images/century_logo.png -image_jo_pdf_battery_assist_logo: /public/assets/images/battery-assist-bm-logo-edited.png -image_jo_pdf_century_logo: /public/assets/images/black-text-logo-01-115x115.png +image_jo_pdf_century_logo: /public/assets/images/pdf_images/275x75-century-logo-placeholder.png +image_jo_pdf_qr_logo_1: /public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png +image_jo_pdf_qr_logo_2: /public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png +image_jo_pdf_qr_code_1: /public/assets/images/pdf_images/120x120-qr-codes.png +image_jo_pdf_qr_code_2: /public/assets/images/pdf_images/120x120-qr-codes.png # default point for maps default_lat: 3.084216 From 694fccfbadf5ec6e9d96f254bcf4669d5d30b0ea Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 4 Oct 2020 22:41:28 +0800 Subject: [PATCH 4/4] Replace pdf filler images with the real ones #515 --- public/assets/images/pdf_images/100x100.png | Bin 0 -> 255 bytes public/assets/images/pdf_images/90.png | Bin 0 -> 276 bytes public/assets/images/pdf_images/95.png | Bin 0 -> 258 bytes public/assets/images/pdf_images/heart_logo.png | Bin 0 -> 4569 bytes public/assets/images/pdf_images/heart_qr.png | Bin 0 -> 12813 bytes .../assets/images/pdf_images/pdf_cmb_logo.png | Bin 0 -> 18695 bytes .../assets/images/pdf_images/touchngo_logo.png | Bin 0 -> 9500 bytes public/assets/images/pdf_images/touchngo_qr.png | Bin 0 -> 15022 bytes .../JobOrderHandler/CMBJobOrderHandler.php | 11 ++++++----- translations/messages.en.yaml | 10 +++++----- 10 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 public/assets/images/pdf_images/100x100.png create mode 100644 public/assets/images/pdf_images/90.png create mode 100644 public/assets/images/pdf_images/95.png create mode 100644 public/assets/images/pdf_images/heart_logo.png create mode 100644 public/assets/images/pdf_images/heart_qr.png create mode 100644 public/assets/images/pdf_images/pdf_cmb_logo.png create mode 100644 public/assets/images/pdf_images/touchngo_logo.png create mode 100644 public/assets/images/pdf_images/touchngo_qr.png diff --git a/public/assets/images/pdf_images/100x100.png b/public/assets/images/pdf_images/100x100.png new file mode 100644 index 0000000000000000000000000000000000000000..8a1daa0121d524256c1d1b45ff5e7ed771784c52 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DImVS)*E46%Oq(`s&YU^>_U&7| zc=6GrN4Ia^zG~H~jT<-Ko_$0QsEo6~BeIx*f$sR&2=kJHM z&5N9@w|=XzipNCbb|s-xrJeH)f2E%im~OIrio1Qy&Sj1+>x<+1)+oPni}kGd6Ohy! z>6x1RttNZTv!7LG>?+Ii&zjEnadB}e3778<6P>u`Anzuis~9|8{an^LB{Ts5qZeh6 literal 0 HcmV?d00001 diff --git a/public/assets/images/pdf_images/90.png b/public/assets/images/pdf_images/90.png new file mode 100644 index 0000000000000000000000000000000000000000..59769ffc0ee75b1b3607b69b8b583948918271cf GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S913?xsr#TWu9=>VS)*E46%Oq(|C=+UE#7cXA5 zYSqS#8|TcKvv1$N?c2Ba{`^u2RK{805n0T@z;^_M8K-LVNdpDvd%8G=M6|xWV90&Q zK%nj6`pj8tWdAUV9^E;&WKGv2iNNmxU9qeSi`DD5?{z%>TI+}HW$T!}0tP`r!M}XL zQ@8z9>)UFTd-&}xp803W*h_DT=Dqb!Db=58H}6#mlelloODoUzsaA8_iu+_LrcOHf z!zFoDt?|2KH4{o&_uWob{C`Z<%kS@PUiF=wnP!uM%|CumNH5wOCv-b%u9}k4FY$bd X6=M88jw*kEPG#_P^>bP0l+XkKjSzB{ literal 0 HcmV?d00001 diff --git a/public/assets/images/pdf_images/95.png b/public/assets/images/pdf_images/95.png new file mode 100644 index 0000000000000000000000000000000000000000..46e691467ef1d64095a7db58e9139ab7c35163c5 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^@gU5?3?yrk*p2}y=>VS)*E46%Oq(|C=+UE#7cXA5 zYSqS#8|TcKvv1$N?c2Ba{`^u2RK{805n0T@z;^_M8K-LVNdpCYJzX3_B3j>`vgT`Y zkZ^s-&2v#mp4)-riip@WkqeV|G$u~s)HOUdE8xMlt4zxk{%ke;zS^&lK}ktz(fz4% z8}7r)37kEKx!R{SmbKeIVgdJEC+a2`VuJ}N9On24( z6LyzFcZ)@uRwVP@zjA+?t&UkPXXv~~J3Bi%UexbpxT!ChUZHjBA<$tAp00i_>zopr E0J%_TkpKVy literal 0 HcmV?d00001 diff --git a/public/assets/images/pdf_images/heart_logo.png b/public/assets/images/pdf_images/heart_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a84544803cd68a19220dc853cd5fef2051d589e5 GIT binary patch literal 4569 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 DoEy;N literal 0 HcmV?d00001 diff --git a/public/assets/images/pdf_images/heart_qr.png b/public/assets/images/pdf_images/heart_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..44df477fe49eaba9a9438c3b901ef1ca7fc6caea GIT binary patch literal 12813 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 e!IJa#p2c&ownE!xT*3K73hrmUTe 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, $y); + $pdf->SetXY($col_qr_code, $y); $pdf->SetFont($font_face, 'B'); $pdf->Cell($label_width, $line_height, $translator->trans('pdf_footer_scan_to_pay')); @@ -2424,19 +2425,19 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // insert qr logos $qr_logo_image_path_1 = $proj_path . $translator->trans('image_jo_pdf_qr_logo_1');; - $pdf->Image($qr_logo_image_path_1, $col2_x, $y, 25); + $pdf->Image($qr_logo_image_path_1, $col_qr_code, $y, 25); $qr_logo_image_path_2 = $proj_path . $translator->trans('image_jo_pdf_qr_logo_2');; - $pdf->Image($qr_logo_image_path_2, $col2_x + 40, $y, 25); + $pdf->Image($qr_logo_image_path_2, $col_qr_code + 30, $y, 25); $y2 = $pdf->GetY(); // insert qr codes $qr_code_image_path_1 = $proj_path . $translator->trans('image_jo_pdf_qr_code_1');; - $pdf->Image($qr_code_image_path_1, $col2_x, $y + 30, 25); + $pdf->Image($qr_code_image_path_1, $col_qr_code, $y + 30); $qr_code_image_path_2 = $proj_path . $translator->trans('image_jo_pdf_qr_code_2');; - $pdf->Image($qr_code_image_path_2, $col2_x + 40, $y + 30, 25); + $pdf->Image($qr_code_image_path_2, $col_qr_code + 30, $y + 30); // get Y after left cell $y1 = $pdf->GetY(); diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 6c757d14..760a95c6 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -34,11 +34,11 @@ icon_login: /assets/images/battery-assist-bm-logo-32x32.png icon_base_32x32: /assets/images/black-text-logo-01-32x32.png icon_base_16x16: /assets/images/black-text-logo-01-16x16.png image_dashboard: /assets/images/century_logo.png -image_jo_pdf_century_logo: /public/assets/images/pdf_images/275x75-century-logo-placeholder.png -image_jo_pdf_qr_logo_1: /public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png -image_jo_pdf_qr_logo_2: /public/assets/images/pdf_images/110x110-qr-codes-logo-placeholder.png -image_jo_pdf_qr_code_1: /public/assets/images/pdf_images/120x120-qr-codes.png -image_jo_pdf_qr_code_2: /public/assets/images/pdf_images/120x120-qr-codes.png +image_jo_pdf_century_logo: /public/assets/images/pdf_images/pdf_cmb_logo.png +image_jo_pdf_qr_logo_1: /public/assets/images/pdf_images/touchngo_logo.png +image_jo_pdf_qr_logo_2: /public/assets/images/pdf_images/heart_logo.png +image_jo_pdf_qr_code_1: /public/assets/images/pdf_images/touchngo_qr.png +image_jo_pdf_qr_code_2: /public/assets/images/pdf_images/heart_qr.png # default point for maps default_lat: 3.084216