1265 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1265 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						||
/*********************************************************************************
 | 
						||
 *
 | 
						||
 * TimeTrex is a Workforce Management program developed by
 | 
						||
 * TimeTrex Software Inc. Copyright (C) 2003 - 2021 TimeTrex Software Inc.
 | 
						||
 *
 | 
						||
 * This program is free software; you can redistribute it and/or modify it under
 | 
						||
 * the terms of the GNU Affero General Public License version 3 as published by
 | 
						||
 * the Free Software Foundation with the addition of the following permission
 | 
						||
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 | 
						||
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY TIMETREX, TIMETREX DISCLAIMS THE
 | 
						||
 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 | 
						||
 *
 | 
						||
 * This program is distributed in the hope that it will be useful, but WITHOUT
 | 
						||
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
						||
 * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
 | 
						||
 * details.
 | 
						||
 *
 | 
						||
 *
 | 
						||
 * You should have received a copy of the GNU Affero General Public License along
 | 
						||
 * with this program; if not, see http://www.gnu.org/licenses or write to the Free
 | 
						||
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						||
 * 02110-1301 USA.
 | 
						||
 *
 | 
						||
 *
 | 
						||
 * You can contact TimeTrex headquarters at Unit 22 - 2475 Dobbin Rd. Suite
 | 
						||
 * #292 West Kelowna, BC V4T 2E9, Canada or at email address info@timetrex.com.
 | 
						||
 *
 | 
						||
 *
 | 
						||
 * The interactive user interfaces in modified source and object code versions
 | 
						||
 * of this program must display Appropriate Legal Notices, as required under
 | 
						||
 * Section 5 of the GNU Affero General Public License version 3.
 | 
						||
 *
 | 
						||
 *
 | 
						||
 * In accordance with Section 7(b) of the GNU Affero General Public License
 | 
						||
 * version 3, these Appropriate Legal Notices must retain the display of the
 | 
						||
 * "Powered by TimeTrex" logo. If the display of the logo is not reasonably
 | 
						||
 * feasible for technical reasons, the Appropriate Legal Notices must display
 | 
						||
 * the words "Powered by TimeTrex".
 | 
						||
 *
 | 
						||
 ********************************************************************************/
 | 
						||
 | 
						||
 | 
						||
include_once( 'CA.class.php' );
 | 
						||
 | 
						||
/**
 | 
						||
 * @package GovernmentForms
 | 
						||
 */
 | 
						||
class GovernmentForms_CA_ROE extends GovernmentForms_CA {
 | 
						||
 | 
						||
	public $xml_schema = 'PayrollExtractXmlV2.xsd'; //http://www.esdc.gc.ca/en/ei/roe/user_requirements/appendix_d.page
 | 
						||
	public $pdf_template = 'roe.pdf';
 | 
						||
 | 
						||
	public $template_offsets = [ -10, 0 ];
 | 
						||
 | 
						||
	function getOptions( $name ) {
 | 
						||
		$retval = null;
 | 
						||
		switch ( $name ) {
 | 
						||
			case 'status':
 | 
						||
				$retval = [
 | 
						||
						'-1010-O' => TTi18n::getText( 'Original' ),
 | 
						||
						'-1020-A' => TTi18n::getText( 'Amended' ),
 | 
						||
						'-1030-C' => TTi18n::getText( 'Cancel' ),
 | 
						||
				];
 | 
						||
				break;
 | 
						||
			case 'type':
 | 
						||
				$retval = [
 | 
						||
						'government' => TTi18n::gettext( 'Government (Multiple Employees/Page)' ),
 | 
						||
						'employee'   => TTi18n::gettext( 'Employee (One Employee/Page)' ),
 | 
						||
				];
 | 
						||
				break;
 | 
						||
		}
 | 
						||
 | 
						||
		return $retval;
 | 
						||
	}
 | 
						||
 | 
						||
	//Set the type of form to display/print. Typically this would be:
 | 
						||
	// government or employee.
 | 
						||
	function getType() {
 | 
						||
		if ( isset( $this->type ) ) {
 | 
						||
			return $this->type;
 | 
						||
		}
 | 
						||
 | 
						||
		return false;
 | 
						||
	}
 | 
						||
 | 
						||
	function setType( $value ) {
 | 
						||
		$this->type = trim( $value );
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	//Set the submission status. Original, Amended, Cancel.
 | 
						||
	function getStatus() {
 | 
						||
		if ( isset( $this->status ) ) {
 | 
						||
			return $this->status;
 | 
						||
		}
 | 
						||
 | 
						||
		return 'O'; //Original
 | 
						||
	}
 | 
						||
 | 
						||
	function setStatus( $value ) {
 | 
						||
		$this->status = strtoupper( trim( $value ) );
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	function getShowInstructionPage() {
 | 
						||
		if ( isset( $this->show_instruction_page ) ) {
 | 
						||
			return $this->show_instruction_page;
 | 
						||
		}
 | 
						||
 | 
						||
		return false;
 | 
						||
	}
 | 
						||
 | 
						||
	function setShowInstructionPage( $value ) {
 | 
						||
		$this->show_instruction_page = (bool)trim( $value );
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	public function getTemplateSchema( $name = null ) {
 | 
						||
		$template_schema = [
 | 
						||
			//Initialize page1, replace years on template.
 | 
						||
			[
 | 
						||
					'page'          => 1,
 | 
						||
					'template_page' => 1,
 | 
						||
					'on_background' => true,
 | 
						||
			],
 | 
						||
 | 
						||
			//Serial
 | 
						||
			'serial' => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 35,
 | 
						||
							'y'      => 58,
 | 
						||
							'h'      => 8,
 | 
						||
							'w'      => 115,
 | 
						||
							'halign' => 'R',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			'payroll_reference_number' => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 370,
 | 
						||
							'y'      => 58,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 210,
 | 
						||
							'halign' => 'R',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			//Employer Info
 | 
						||
			//Company information
 | 
						||
			'company_name'             => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 35,
 | 
						||
							'y'      => 90,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 310,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			'company_address'     => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterCompanyAddress', 'drawNormal' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 35,
 | 
						||
							'y'      => 105,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 310,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
					'multicell'   => true,
 | 
						||
			],
 | 
						||
			'company_postal_code' => [
 | 
						||
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 280,
 | 
						||
							'y'      => 138,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 65,
 | 
						||
							'halign' => 'C',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 10,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			//Business Number
 | 
						||
			'business_number'     => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 370,
 | 
						||
							'y'      => 85,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 210,
 | 
						||
							'halign' => 'R',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
			//Employee info
 | 
						||
			'employee_full_name'  => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 35,
 | 
						||
							'y'      => 165,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 310,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			'employee_address' => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterEmployeeAddress', 'drawNormal' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 35,
 | 
						||
							'y'      => 180,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 310,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
					'multicell'   => true,
 | 
						||
			],
 | 
						||
 | 
						||
			//Pay Period Type
 | 
						||
			'pay_period_type'  => [
 | 
						||
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 370,
 | 
						||
							'y'      => 112,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 210,
 | 
						||
							'halign' => 'R',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
			//SIN
 | 
						||
			'sin'              => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 370,
 | 
						||
							'y'      => 136,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 210,
 | 
						||
							'halign' => 'R',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			//Employee Title
 | 
						||
			'title'            => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 35,
 | 
						||
							'y'      => 240,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 310,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 12,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
			//First Day Worked
 | 
						||
			'first_date'       => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterDate', 'drawSegments' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 490,
 | 
						||
									'y'      => 160,
 | 
						||
									'h'      => 15,
 | 
						||
									'w'      => 20,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 512,
 | 
						||
									'y'      => 160,
 | 
						||
									'h'      => 15,
 | 
						||
									'w'      => 26,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 540,
 | 
						||
									'y'      => 160,
 | 
						||
									'h'      => 15,
 | 
						||
									'w'      => 40,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'size' => 10,
 | 
						||
							'type' => '',
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
 | 
						||
			//Last day paid
 | 
						||
 | 
						||
			'last_date'           => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterDate', 'drawSegments' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 490,
 | 
						||
									'y'      => 185,
 | 
						||
									'h'      => 17,
 | 
						||
									'w'      => 21,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 513,
 | 
						||
									'y'      => 185,
 | 
						||
									'h'      => 17,
 | 
						||
									'w'      => 25,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 540,
 | 
						||
									'y'      => 185,
 | 
						||
									'h'      => 17,
 | 
						||
									'w'      => 40,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			//Pay Period End Date
 | 
						||
			'pay_period_end_date' => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterDate', 'drawSegments' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 490,
 | 
						||
									'y'      => 210,
 | 
						||
									'h'      => 18,
 | 
						||
									'w'      => 21,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 513,
 | 
						||
									'y'      => 210,
 | 
						||
									'h'      => 18,
 | 
						||
									'w'      => 25,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 540,
 | 
						||
									'y'      => 210,
 | 
						||
									'h'      => 18,
 | 
						||
									'w'      => 40,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			'recall_date'        => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterDate', 'drawSegments' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 490,
 | 
						||
									'y'      => 240,
 | 
						||
									'h'      => 18,
 | 
						||
									'w'      => 21,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 513,
 | 
						||
									'y'      => 240,
 | 
						||
									'h'      => 18,
 | 
						||
									'w'      => 25,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 540,
 | 
						||
									'y'      => 240,
 | 
						||
									'h'      => 18,
 | 
						||
									'w'      => 40,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
 | 
						||
			],
 | 
						||
 | 
						||
			// not returning
 | 
						||
			'not_returning'      => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawCheckBox' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 423,
 | 
						||
									'y'      => 242,
 | 
						||
									'h'      => 8,
 | 
						||
									'w'      => 11,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
			//Insurable Hours
 | 
						||
			'insurable_hours'    => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 170,
 | 
						||
							'y'      => 268,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 85,
 | 
						||
							'halign' => 'R',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
 | 
						||
			],
 | 
						||
 | 
						||
			//Insurable Earnings
 | 
						||
			'insurable_earnings' => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawSplitDecimalFloat' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 180,
 | 
						||
									'y'      => 298,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 60,
 | 
						||
									'halign' => 'R',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 239,
 | 
						||
									'y'      => 298,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 15,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
							//'text_color' => array( 255, 0, 0 ),
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			'insurable_earnings_pay_periods' => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterInsurableEarningsPayPeriods', 'drawNormal' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 37,
 | 
						||
							'y'      => 304,
 | 
						||
							'h'      => 5,
 | 
						||
							'w'      => 70,
 | 
						||
							'halign' => 'C',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 8,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			//Enter Code
 | 
						||
			'code_id'                        => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 542,
 | 
						||
							'y'      => 268,
 | 
						||
							'h'      => 10,
 | 
						||
							'w'      => 20,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
			//Further Information Contact Name
 | 
						||
			'created_user_full_name'         => [
 | 
						||
					'function' => [ 'draw' => [ 'drawPiecemeal' ] ],
 | 
						||
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 270,
 | 
						||
									'y'      => 294,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 310,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 275,
 | 
						||
									'y'      => 710,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 210,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
			'created_user_work_phone'        => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawPiecemeal' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 330,
 | 
						||
									'y'      => 305,
 | 
						||
									'h'      => 8,
 | 
						||
									'w'      => 250,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 155,
 | 
						||
									'y'      => 715,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 110,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
 | 
						||
			'vacation_pay' => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawSplitDecimalFloat', 'showVacationPayWarning' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 510,
 | 
						||
									'y'      => 351,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 42,
 | 
						||
									'halign' => 'R',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 552,
 | 
						||
									'y'      => 351,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 16,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
 | 
						||
			],
 | 
						||
			'comments'     => [
 | 
						||
					'coordinates' => [
 | 
						||
							'x'      => 290,
 | 
						||
							'y'      => 540,
 | 
						||
							'h'      => 45,
 | 
						||
							'w'      => 290,
 | 
						||
							'halign' => 'L',
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			//English
 | 
						||
			'english'      => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawCheckBox' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 40,
 | 
						||
									'y'      => 713,
 | 
						||
									'h'      => 8,
 | 
						||
									'w'      => 15,
 | 
						||
									'halign' => 'L',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
			'created_date' => [
 | 
						||
					'function'    => [ 'draw' => [ 'filterDate', 'drawSegments' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 490,
 | 
						||
									'y'      => 717,
 | 
						||
									'h'      => 8,
 | 
						||
									'w'      => 25,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 518,
 | 
						||
									'y'      => 717,
 | 
						||
									'h'      => 8,
 | 
						||
									'w'      => 25,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 544,
 | 
						||
									'y'      => 717,
 | 
						||
									'h'      => 8,
 | 
						||
									'w'      => 35,
 | 
						||
									'halign' => 'C',
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
 | 
						||
			],
 | 
						||
 | 
						||
			'pay_period_earnings' => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawGrid', 'showPayPeriod1Warning'  ] ],
 | 
						||
					'grid'        => [
 | 
						||
							'column'     => 3, // total columns
 | 
						||
							'top_left_x' => 35, // start x
 | 
						||
							'top_left_y' => 368,   // start y
 | 
						||
							'h'          => 18,  // Each of the height of the grid
 | 
						||
							'w'          => 60, // Each of the width of the grid
 | 
						||
							'step_x'     => 84,
 | 
						||
							'step_y'     => 18,
 | 
						||
					],
 | 
						||
					'coordinates' => [
 | 
						||
							'halign' => 'R',
 | 
						||
							// not in here handle .
 | 
						||
							//'x' => 35,
 | 
						||
							//'y' => 368,
 | 
						||
							//'h' => 18,
 | 
						||
							//'w' => 60,
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 8,
 | 
						||
					],
 | 
						||
			],
 | 
						||
			'statutory_holiday'   => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawSplitDecimalFloatGrid' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 352,
 | 
						||
											'y'      => 380,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 396,
 | 
						||
											'y'      => 380,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
 | 
						||
									],
 | 
						||
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 380,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 380,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 352,
 | 
						||
											'y'      => 397,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 396,
 | 
						||
											'y'      => 397,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 397,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 397,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 352,
 | 
						||
											'y'      => 414,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 396,
 | 
						||
											'y'      => 414,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 414,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 414,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 352,
 | 
						||
											'y'      => 429,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 396,
 | 
						||
											'y'      => 429,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 429,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 429,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 352,
 | 
						||
											'y'      => 446,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 396,
 | 
						||
											'y'      => 446,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 446,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 446,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
 | 
						||
 | 
						||
			],
 | 
						||
			'other_monies'        => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawSplitDecimalFloatGrid' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 476,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 476,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 494,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 494,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
							[
 | 
						||
									[
 | 
						||
											'x'      => 507,
 | 
						||
											'y'      => 514,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 47,
 | 
						||
											'halign' => 'R',
 | 
						||
									],
 | 
						||
									[
 | 
						||
											'x'      => 551,
 | 
						||
											'y'      => 514,
 | 
						||
											'h'      => 10,
 | 
						||
											'w'      => 17,
 | 
						||
											'halign' => 'L',
 | 
						||
									],
 | 
						||
							],
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
			'other_monies_label'        => [
 | 
						||
					'function'    => [ 'draw' => [ 'drawNormalGrid' ] ],
 | 
						||
					'coordinates' => [
 | 
						||
							[
 | 
						||
									'x'      => 285,
 | 
						||
									'y'      => 476,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 207,
 | 
						||
									'halign' => 'R',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 285,
 | 
						||
									'y'      => 494,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 207,
 | 
						||
									'halign' => 'R',
 | 
						||
							],
 | 
						||
							[
 | 
						||
									'x'      => 285,
 | 
						||
									'y'      => 514,
 | 
						||
									'h'      => 10,
 | 
						||
									'w'      => 207,
 | 
						||
									'halign' => 'R',
 | 
						||
							],
 | 
						||
 | 
						||
					],
 | 
						||
					'font'        => [
 | 
						||
							'type' => '',
 | 
						||
							'size' => 10,
 | 
						||
					],
 | 
						||
			],
 | 
						||
 | 
						||
		];
 | 
						||
 | 
						||
		if ( isset( $template_schema[$name] ) ) {
 | 
						||
			return $name;
 | 
						||
		} else {
 | 
						||
			return $template_schema;
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
 | 
						||
	function filterMiddleName( $value ) {
 | 
						||
		//Return just initial
 | 
						||
		$value = substr( $value, 0, 1 );
 | 
						||
 | 
						||
		return $value;
 | 
						||
	}
 | 
						||
 | 
						||
	function filterCompanyAddress( $value ) {
 | 
						||
		//Combine company address for multicell display.
 | 
						||
		//Dont specify postal code though, as thats in a separate box.
 | 
						||
		return Misc::formatAddress( null, $this->company_address1, $this->company_address2, $this->company_city, $this->company_province );
 | 
						||
	}
 | 
						||
 | 
						||
	function filterEmployeeAddress( $value ) {
 | 
						||
		//Combine employee address for multicell display.
 | 
						||
		return Misc::formatAddress( null, $this->employee_address1, $this->employee_address2, $this->employee_city, $this->employee_province, $this->employee_postal_code );
 | 
						||
	}
 | 
						||
 | 
						||
	function filterDate( $value ) {
 | 
						||
		if ( $value != '' || $value != null ) {
 | 
						||
			$value = getdate( $value );
 | 
						||
			$value = [ $value['mday'], $value['mon'], $value['year'] ];
 | 
						||
		}
 | 
						||
 | 
						||
		return $value;
 | 
						||
	}
 | 
						||
 | 
						||
	function filterInsurableEarningsPayPeriods( $value ) {
 | 
						||
		$retval = (int)$value;
 | 
						||
		$total_pay_periods_with_earnings = ( is_array( $this->pay_period_earnings ) ) ? count( $this->pay_period_earnings ) : 0;
 | 
						||
		if ( $value > $total_pay_periods_with_earnings ) {
 | 
						||
			return null; //No need to display this msg as all PPs are included.
 | 
						||
		} else {
 | 
						||
			return '*' . TTi18n::getText( 'Includes PP: 1 to %1', [ $retval ] );
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	function showPayPeriod1Warning() {
 | 
						||
		if ( isset( $this->pay_period_earnings ) && is_array( $this->pay_period_earnings ) && count( $this->pay_period_earnings ) > 0 && isset( $this->pay_period_earnings[0] ) ) {
 | 
						||
			$last_pay_period_earnings = $this->pay_period_earnings[0];
 | 
						||
			Debug::Text( 'First PP Earnings: ' . $last_pay_period_earnings, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						||
 | 
						||
			if ( $last_pay_period_earnings < 1.00 ) { //Pay Period #1 (last PP) can not be less than $1.
 | 
						||
				Debug::Text( 'Pay Period #1 must have insurable earnings of at least $1', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						||
				$this->addMessage( 'warning', 'Pay Period #1 must have insurable earnings of at least $1.', [ 'page' => $this->getCurrentPage(), 'x' => ( 33 + $this->getTempPageOffsets( 'x' ) + $this->getPageMargins( 'x' ) ), 'y' => ( 368 + $this->getTempPageOffsets( 'y' ) + $this->getPageMargins( 'y' ) ) ] );
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	function showVacationPayWarning() {
 | 
						||
		if ( isset( $this->vacation_pay ) && $this->vacation_pay > 0 && isset( $this->pay_period_earnings ) && is_array( $this->pay_period_earnings ) && count( $this->pay_period_earnings ) > 0 && isset( $this->pay_period_earnings[0] ) ) {
 | 
						||
			$last_pay_period_earnings = $this->pay_period_earnings[0];
 | 
						||
			Debug::Text( 'First PP Earnings: ' . $last_pay_period_earnings . ' Vacation Pay: ' . $this->vacation_pay, __FILE__, __LINE__, __METHOD__, 10 );
 | 
						||
 | 
						||
			if ( $this->vacation_pay >= $last_pay_period_earnings ) {
 | 
						||
				Debug::Text( 'Vacation Pay equals or exceeds last PP earnings, which is not allowed, as there must also be some insurable earnings in that pay period too.', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						||
				$this->addMessage( 'warning', 'Vacation pay must not match Pay Period #1 earnings.', [ 'page' => $this->getCurrentPage(), 'x' => ( 322 + $this->getTempPageOffsets( 'x' ) + $this->getPageMargins( 'x' ) ), 'y' => ( 330 + $this->getTempPageOffsets( 'y' ) + $this->getPageMargins( 'y' ) ) ] );
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	function _outputXML( $type = null ) {
 | 
						||
		$records = $this->getRecords();
 | 
						||
		Debug::Arr( $records, 'Output XML Records: ', __FILE__, __LINE__, __METHOD__, 10 );
 | 
						||
 | 
						||
		if ( is_array( $records ) && count( $records ) > 0 ) {
 | 
						||
 | 
						||
			$pay_period_type_options = [
 | 
						||
				//5 => TTi18n::gettext('Manual'),
 | 
						||
				10  => 'W',
 | 
						||
				20  => 'B',
 | 
						||
				30  => 'S',
 | 
						||
				50  => 'M',
 | 
						||
				100 => 'W', //Weekly 53/year
 | 
						||
				200 => 'B', //Bi-Weekly 27/year
 | 
						||
			];
 | 
						||
 | 
						||
 | 
						||
			$xml = new SimpleXMLElement( '<ROEHEADER FileVersion="W-2.0" SoftwareVendor="' . APPLICATION_NAME . '" ProductName="' . APPLICATION_NAME . '"></ROEHEADER>' );
 | 
						||
			$this->setXMLObject( $xml );
 | 
						||
 | 
						||
			$e = 0;
 | 
						||
			foreach ( $records as $employee_data ) {
 | 
						||
 | 
						||
				//Debug::Arr($employee_data, 'Employee Data: ', __FILE__, __LINE__, __METHOD__,10);
 | 
						||
				$this->arrayToObject( $employee_data ); //Convert record array to object
 | 
						||
 | 
						||
				$xml->addChild( 'ROE' );
 | 
						||
				$xml->ROE[$e]->addAttribute( 'PrintingLanguage', 'E' );                                           //E=English, F=French
 | 
						||
				$xml->ROE[$e]->addAttribute( 'Issue', 'S' );                                                      //S=Submit, D=Draft
 | 
						||
 | 
						||
				// Box2
 | 
						||
				if ( $this->serial != '' ) {
 | 
						||
					$xml->ROE[$e]->addChild( 'B2', substr( $this->serial, 0, 9 ) ); //maxLength 9  minOccurs="0" -- This is the serial number of the ROE amended or replaced.
 | 
						||
				}
 | 
						||
 | 
						||
				// Box3
 | 
						||
				if ( $this->payroll_reference_number != '' ) {
 | 
						||
					$xml->ROE[$e]->addChild( 'B3', substr( $this->payroll_reference_number, 0, 15 ) ); //maxLength 15  minOccurs="0"
 | 
						||
				}
 | 
						||
				// Box5
 | 
						||
				$xml->ROE[$e]->addChild( 'B5', substr( str_replace( ' ', '', $this->business_number ), 0, 15 ) ); //maxLength 15 - Remove any spaces as well, to prevent business numbers like: 123456789 RP 0001 from causing problems.
 | 
						||
				// Box6
 | 
						||
				$xml->ROE[$e]->addChild( 'B6', $pay_period_type_options[$this->pay_period_type_id] );             //maxLength 1
 | 
						||
				// Box8
 | 
						||
				$xml->ROE[$e]->addChild( 'B8', ( $this->sin != '' ) ? $this->sin : '999999999' );                 //maxLength 9 - This must be specified, but allow all 9's for cases where the employee may be out of the country?
 | 
						||
				// Box9
 | 
						||
				$xml->ROE[$e]->addChild( 'B9' );
 | 
						||
				$xml->ROE[$e]->B9->addChild( 'FN', substr( $this->first_name, 0, 20 ) ); //maxLength 20
 | 
						||
				if ( $this->middle_name != '' ) {
 | 
						||
					$xml->ROE[$e]->B9->addChild( 'MN', substr( $this->middle_name, 0, 4 ) ); //maxLength 4  minOccurs="0"
 | 
						||
				}
 | 
						||
				$xml->ROE[$e]->B9->addChild( 'LN', substr( $this->last_name, 0, 28 ) ); //maxLength 28
 | 
						||
				$xml->ROE[$e]->B9->addChild( 'A1', substr( Misc::stripHTMLSpecialChars( $this->employee_address1 ) . ' ' . Misc::stripHTMLSpecialChars( $this->employee_address2 ), 0, 35 ) ); //maxLength 35
 | 
						||
				if ( $this->employee_city != '' ) {
 | 
						||
					$xml->ROE[$e]->B9->addChild( 'A2', substr( $this->employee_city, 0, 35 ) );//maxLength 35  minOccurs="0"
 | 
						||
				}
 | 
						||
				if ( $this->employee_province != '' ) {
 | 
						||
					$xml->ROE[$e]->B9->addChild( 'A3', $this->employee_province ); //maxLength 35  minOccurs="0"
 | 
						||
				}
 | 
						||
				if ( $this->employee_postal_code != '' ) {
 | 
						||
					$xml->ROE[$e]->B9->addChild( 'PC', $this->employee_postal_code );
 | 
						||
				}
 | 
						||
 | 
						||
				// Box10
 | 
						||
				$xml->ROE[$e]->addChild( 'B10', date( 'Y-m-d', $this->first_date ) );                                                                                                         //maxLength 8
 | 
						||
				// Box11
 | 
						||
				$xml->ROE[$e]->addChild( 'B11', date( 'Y-m-d', $this->last_date ) );                                                                                                          //maxLength 8
 | 
						||
				// Box12
 | 
						||
				$xml->ROE[$e]->addChild( 'B12', date( 'Y-m-d', $this->pay_period_end_date ) );                                                                                                //maxLength 8
 | 
						||
				// Box13
 | 
						||
				if ( $this->title != '' ) {
 | 
						||
					$xml->ROE[$e]->addChild( 'B13', substr( Misc::stripHTMLSpecialChars( $this->title ), 0, 40 ) ); //maxLength 40  minOccurs="0"
 | 
						||
				}
 | 
						||
				// Box14
 | 
						||
				$xml->ROE[$e]->addChild( 'B14' );                                                                                                                                             // minOccurs="0"
 | 
						||
				$xml->ROE[$e]->B14->addChild( 'CD', ( ( $this->recall_date != '' ) ? 'Y' : 'N' ) );                                                                                           //maxLength 1
 | 
						||
				$xml->ROE[$e]->B14->addChild( 'DT', ( ( $this->recall_date != '' ) ? date( 'Y-m-d', $this->recall_date ) : '' ) );                                                            //maxLength 8   minOccurs="0"
 | 
						||
 | 
						||
				// Box15A
 | 
						||
				$xml->ROE[$e]->addChild( 'B15A', substr( round( $this->insurable_hours ), 0, 4 ) );                                                                                           //maxLength 4
 | 
						||
				// Box15B
 | 
						||
				//$xml->ROE[$e]->addChild('B15B', (float)substr($this->insurable_earnings, -9, 9)); //maxLength 9
 | 
						||
 | 
						||
				// Box15C
 | 
						||
				$xml->ROE[$e]->addChild( 'B15C' );
 | 
						||
 | 
						||
				if ( is_array( $this->pay_period_earnings ) ) {
 | 
						||
					$i = 1;
 | 
						||
					$x = 0;
 | 
						||
					foreach ( $this->pay_period_earnings as $pay_period_earning ) {
 | 
						||
						if ( $x == 53 ) {
 | 
						||
							break;
 | 
						||
						}
 | 
						||
						$xml->ROE[$e]->B15C->addChild( 'PP' ); //maxOccurs="53"
 | 
						||
						$xml->ROE[$e]->B15C->PP[$x]->addAttribute( 'nbr', $i );
 | 
						||
						$xml->ROE[$e]->B15C->PP[$x]->addChild( 'AMT', (float)substr( $pay_period_earning, -9, 9 ) ); //maxLength 9
 | 
						||
						$i++;
 | 
						||
						$x++;
 | 
						||
					}
 | 
						||
				} else {
 | 
						||
					$xml->ROE[$e]->B15C->addChild( 'PP' ); //maxOccurs="53"
 | 
						||
					$xml->ROE[$e]->B15C->PP->addAttribute( 'nbr', 1 );
 | 
						||
					$xml->ROE[$e]->B15C->PP->addChild( 'AMT', 0 ); //maxLength 9
 | 
						||
				}
 | 
						||
				// Box16
 | 
						||
				$xml->ROE[$e]->addChild( 'B16' );
 | 
						||
				$xml->ROE[$e]->B16->addChild( 'CD', $this->code_id );                 //maxLength 1
 | 
						||
				$xml->ROE[$e]->B16->addChild( 'FN', substr( $this->created_user_first_name, 0, 20 ) ); //maxLength 20
 | 
						||
				$xml->ROE[$e]->B16->addChild( 'LN', substr( $this->created_user_last_name, 0, 28 ) );  //maxLength 28
 | 
						||
 | 
						||
				if ( $this->created_user_work_phone != '' ) {
 | 
						||
					$phone = $this->created_user_work_phone;
 | 
						||
				} else if ( $this->company_work_phone != '' ) {
 | 
						||
					$phone = $this->company_work_phone;
 | 
						||
				}
 | 
						||
 | 
						||
				$validator = new Validator();
 | 
						||
				$phone = $validator->stripNonNumeric( $phone );
 | 
						||
 | 
						||
				$xml->ROE[$e]->B16->addChild( 'AC', substr( $phone, 0, 3 ) );  //maxLength 3
 | 
						||
				$xml->ROE[$e]->B16->addChild( 'TEL', substr( $phone, 3, 7 ) ); //maxLength 7
 | 
						||
 | 
						||
				// Box17A
 | 
						||
				if ( $this->vacation_pay > 0 ) {
 | 
						||
					//$xml->ROE[$e]->addChild('B17A', (float)substr($this->vacation_pay, -9, 9)); // maxLength 9   minOccurs="0"
 | 
						||
					$xml->ROE[$e]->addChild( 'B17A' );
 | 
						||
					$xml->ROE[$e]->B17A->addChild( 'VP' );
 | 
						||
					$xml->ROE[$e]->B17A->VP->addAttribute( 'nbr', 1 );
 | 
						||
					$xml->ROE[$e]->B17A->VP->addChild( 'CD', 2 ); //1=Included with each pay, 2=Paid because no longer working
 | 
						||
					$xml->ROE[$e]->B17A->VP->addChild( 'AMT', (float)substr( $this->vacation_pay, -9, 9 ) );
 | 
						||
				}
 | 
						||
 | 
						||
				// Box17B
 | 
						||
				if ( is_array( $this->statutory_holiday ) ) {
 | 
						||
					$xml->ROE[$e]->addChild( 'B17B' ); // minOccurs="0"
 | 
						||
 | 
						||
					$x = 0;
 | 
						||
					$i = 0;
 | 
						||
					foreach ( $this->statutory_holiday as $holiday ) {
 | 
						||
 | 
						||
						if ( $x == 3 ) {
 | 
						||
							break;
 | 
						||
						}
 | 
						||
						if ( is_array( $holiday ) ) {
 | 
						||
							$xml->ROE[$e]->B17B->addChild( 'SH' ); //minOccurs="0" maxOccurs="3"
 | 
						||
							$xml->ROE[$e]->B17B->SH[$x]->addAttribute( 'nbr', $i );
 | 
						||
							$xml->ROE[$e]->B17B->SH[$x]->addChild( 'DT', date( 'Y-m-d', $holiday['date'] ) );           //maxLength 8
 | 
						||
							$xml->ROE[$e]->B17B->SH[$x]->addChild( 'AMT', (float)substr( $holiday['amount'], -9, 9 ) ); //maxLength 9
 | 
						||
 | 
						||
							$x++;
 | 
						||
							$i++;
 | 
						||
						} else {
 | 
						||
							continue;
 | 
						||
						}
 | 
						||
					}
 | 
						||
				}
 | 
						||
 | 
						||
 | 
						||
				// Box17C
 | 
						||
				if ( is_array( $this->other_monies ) ) {
 | 
						||
					$xml->ROE[$e]->addChild( 'B17C' ); //minOccurs="0"
 | 
						||
 | 
						||
					$x = 0;
 | 
						||
					$i = 1;
 | 
						||
					foreach ( $this->other_monies as $monies ) {
 | 
						||
						if ( $x == 3 ) {
 | 
						||
							break;
 | 
						||
						}
 | 
						||
						if ( is_array( $monies ) ) {
 | 
						||
							$xml->ROE[$e]->B17C->addChild( 'OM' ); //minOccurs="0" maxOccurs="3"
 | 
						||
							$xml->ROE[$e]->B17C->OM[$x]->addAttribute( 'nbr', $i );
 | 
						||
							$xml->ROE[$e]->B17C->OM[$x]->addChild( 'CD', $monies['code'] );               //minLength: 3 maxLength: 3 See Other Monies Codes: https://www.canada.ca/en/employment-social-development/programs/ei/ei-list/ei-roe/user-requirements/appendix-d.html  -- "Table 12: 17C.1 – Other Monies Information"
 | 
						||
							$xml->ROE[$e]->B17C->OM[$x]->addChild( 'AMT', (float)substr( $monies['amount'], -9, 9 ) ); //maxLength 9
 | 
						||
 | 
						||
							$x++;
 | 
						||
							$i++;
 | 
						||
						} else {
 | 
						||
							continue;
 | 
						||
						}
 | 
						||
					}
 | 
						||
				}
 | 
						||
 | 
						||
				// Box18
 | 
						||
				if ( $this->comments != '' ) {
 | 
						||
					$xml->ROE[$e]->addChild( 'B18', substr( Misc::stripHTMLSpecialChars( $this->comments ), 0, 160 ) ); //minOccurs="0", maxLength=160
 | 
						||
				}
 | 
						||
 | 
						||
 | 
						||
				// Box19   //minOccurs="0"
 | 
						||
 | 
						||
 | 
						||
				// Box20
 | 
						||
				$xml->ROE[$e]->addChild( 'B20', 'E' );                         //Language //minOccurs="0"  //maxLength 1
 | 
						||
 | 
						||
				$this->revertToOriginalDataState();
 | 
						||
 | 
						||
				$e++;
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
 | 
						||
	function _outputPDF( $type ) {
 | 
						||
		//Initialize PDF with template.
 | 
						||
		$pdf = $this->getPDFObject();
 | 
						||
 | 
						||
		if ( $this->getShowBackground() == true ) {
 | 
						||
 | 
						||
			$pdf->setSourceFile( $this->getTemplateDirectory() . DIRECTORY_SEPARATOR . $this->pdf_template );
 | 
						||
 | 
						||
			$this->template_index[1] = $pdf->ImportPage( 1 );
 | 
						||
			//$this->template_index[2] = $pdf->ImportPage(2);
 | 
						||
			//$this->template_index[3] = $pdf->ImportPage(3);
 | 
						||
		}
 | 
						||
 | 
						||
		if ( $this->year == '' ) {
 | 
						||
			$this->year = $this->getYear();
 | 
						||
		}
 | 
						||
 | 
						||
		//Get location map, start looping over each variable and drawing
 | 
						||
		$records = $this->getRecords();
 | 
						||
		if ( is_array( $records ) && count( $records ) > 0 ) {
 | 
						||
 | 
						||
			$template_schema = $this->getTemplateSchema();
 | 
						||
 | 
						||
			$e = 0;
 | 
						||
			foreach ( $records as $employee_data ) {
 | 
						||
				//Debug::Arr($employee_data, 'Employee Data: ', __FILE__, __LINE__, __METHOD__,10);
 | 
						||
				$this->arrayToObject( $employee_data ); //Convert record array to object
 | 
						||
 | 
						||
				foreach ( $template_schema as $field => $schema ) {
 | 
						||
					//Debug::text('Drawing Cell... Field: '. $field, __FILE__, __LINE__, __METHOD__, 10);
 | 
						||
					$this->Draw( $this->$field, $schema );
 | 
						||
				}
 | 
						||
 | 
						||
				$this->resetTemplatePage();
 | 
						||
 | 
						||
				$this->revertToOriginalDataState();
 | 
						||
 | 
						||
				$e++;
 | 
						||
			}
 | 
						||
		}
 | 
						||
 | 
						||
		$this->drawMessages();
 | 
						||
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
?>
 |