Created
November 20, 2014 11:14
-
-
Save anonymous/0203c377fcc0bd670863 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class ContractForm_Step1 extends MultiFormStep { | |
protected static $fields; | |
public static $can_go_back = true; | |
public static $next_steps = 'ContractForm_Step2'; | |
function Title() { | |
return _t("ContractForm.StepNum", "Step", array("num" => 1)); | |
} | |
function Subtitle() { | |
return "Contract details"; | |
} | |
function onBeforeWrite(){ | |
parent::onBeforeWrite(); | |
//if we're coming from the init step | |
if( | |
isset($_POST['Step']) && | |
$_POST['Step'] == "ContractForm_Check" && | |
isset($_POST['Template']) | |
) { | |
$defaults = unserialize($this->Session()->Template()->Data); | |
$this->Data = serialize($defaults[$this->ClassName]); | |
$data = unserialize($this->Data); | |
$data['PlaceOfWork'] = Member::currentUser()->Organisation()->HeadOfficeAddress; | |
$this->Data = serialize($data); | |
} | |
if(isset($_POST['ChosenEmployee'])) { | |
$employee = Member::get()->filter(array( | |
'ID' => $_POST['ChosenEmployee'], | |
'OrganisationID' => Member::currentUser()->OrganisationID | |
))->First(); | |
//if they've selected a chosen employee | |
if($employee->ID) { | |
$data = unserialize($this->Data); | |
$data['EmployeeName'] = $employee->Name; | |
$data['EmployeeAddress'] = $employee->Address; | |
$this->Data = serialize($data); | |
} | |
} | |
} | |
function getFields() { | |
if(!self::$fields) { | |
$employment_types = array( | |
'full-time' => _t('ContractForm.EmploymentType_FullTime'), | |
'part-time' => _t('ContractForm.EmploymentType_PartTime') | |
); | |
$number_range = range(1, 31); | |
$date_range = array(); | |
foreach($number_range as &$number) { | |
$ends = array('th','st','nd','rd','th','th','th','th','th','th'); | |
if (($number %100) >= 11 && ($number%100) <= 13) | |
$ord = $number. 'th'; | |
else | |
$ord = $number. $ends[$number % 10]; | |
$date_range[$ord] = $ord; | |
} | |
unset($number); | |
$months = array("January" => "January","February" => "February","March" => "March", "April" => "April", "May" => "May","June" => "June","July" =>"July", "August" => "August","September" => "September", "October" => "October","November" => "November", "December" =>"December"); | |
$weeks_or_months = array( | |
'Weeks' => _t('Common.Weeks'), | |
'Months' => _t('Common.Months') | |
); | |
$yes_no = array('Yes' => _t('Common.Yes'), 'No' => _t('Common.No')); | |
$overtimepay_days = array( | |
'All week' => 'All week', | |
'Monday - Friday' => 'Monday - Friday', | |
'Saturday' => 'Saturday', | |
'Sunday' => 'Sunday', | |
'Saturday & Sunday' => 'Saturday & Sunday', | |
'Public Holiday' => 'Public Holiday' | |
); | |
$overtimepay_times = array( | |
'All times' => 'All times', | |
'After 5pm' => 'After 5pm', | |
'After 6pm' => 'After 6pm', | |
'After 7pm' => 'After 7pm', | |
'After 8pm' => 'After 8pm', | |
'After 9pm' => 'After 9pm', | |
'After 10pm' => 'After 10pm', | |
'After 11pm' => 'After 11pm', | |
'After midnight' => 'After midnight', | |
'Before 12 noon' => 'Before 12 noon', | |
'After 12 noon' => 'After 12 noon' | |
); | |
$overtimepay_rates = array( | |
'Normal hourly rate' => 'Normal hourly rate', | |
'1.5 times your normal hourly rate' => '1.5 times the normal hourly rate', | |
'2.0 times your normal hourly rate' => '2.0 times the normal hourly rate', | |
'3.0 times your normal hourly rate' => '3.0 times the normal hourly rate', | |
'As agreed with your line manager' => 'As agreed with your line manager' | |
); | |
$fields = new FieldList( | |
TextField::create('EmployeeName'), | |
AddressField::create('EmployeeAddress', 'Employee Address'), | |
DateField::create('EmploymentStartDate') | |
->setConfig('dateformat', 'd MMMM yyyy') | |
->setConfig('datavalueformat', 'd MMMM yyyy') | |
->setRightTitle('This is the original start date of the employment <strong>not</strong> when the contract is issued.'), | |
HeaderField::create('Section_PositionAndDuties', _t('ContractForm.Section_PositionAndDuties')), | |
TextField::create('EmployeeJobTitle') | |
->setRightTitle('e.g. Administrator, Electrician, Receptionist'), | |
DropdownField::create('EmploymentType', null, $employment_types), | |
OptionsetField::create('HaveJobDescription', 'Do you have a job description in place for this contract?', $yes_no), | |
DropdownField::create('WhereCanEmployeesFindJobDescription', null, array( | |
'LineManager' => _t('Common.CanBeObtainedFrom_LineManager'), | |
'Office' => _t('Common.CanBeObtainedFrom_Office'), | |
'HR' => _t('Common.CanBeObtainedFrom_HR'), | |
'ThisContract' => _t('Common.CanBeObtainedFrom_ThisContract'), | |
'FinanceDept' => _t('Common.CanBeObtainedFrom_FinanceDept'), | |
'ConsultManager' => "Please consult your Manager for an outline of your duties" | |
))->displayIf('HaveJobDescription')->isEqualTo('Yes')->end(), | |
HeaderField::create('Section_ProbationaryPeriod', _t('ContractForm.Section_ProbationaryPeriod')), | |
OptionsetField::create('HaveProbationaryPeriod', null, $yes_no) | |
->setRightTitle('\'Yes\' is recommended'), | |
DropdownField::create('ProbationaryPeriodLength', '', array( | |
'3 months' => '3 months', | |
'6 months' => '6 months' | |
)) | |
->setRightTitle('3 months is recommended') | |
->setValue('3 months') | |
->displayIf('HaveProbationaryPeriod')->isEqualTo('Yes')->end(), | |
HeaderField::create('Section_Remuneration', _t('ContractForm.Section_Remuneration')), | |
OptionsetField::create('ForHourlyOrSalaried', 'Is this contract for hourly paid or salaried employees?', array( | |
'Hourly' => 'Hourly', | |
'Salaried' => 'Salaried' | |
))->setValue('Salaried'), | |
TextField::create('HourlyAmount') | |
->setRightTitle('e.g. 8.00 - not £8.00') | |
->validateIf('ForHourlyOrSalaried')->isEqualTo('Hourly')->end() | |
->displayIf('ForHourlyOrSalaried')->isEqualTo('Hourly')->end(), | |
TextField::create('SalaryAmount') | |
->setRightTitle('e.g. 25,000 - not £25,000') | |
->validateIf('ForHourlyOrSalaried')->isEqualTo('Salaried')->end() | |
->displayIf('ForHourlyOrSalaried')->isEqualTo('Salaried')->end(), | |
DropdownField::create('FrequencyOfPay', 'What is their frequency of pay?', array( | |
'Weekly' => _t('ContractForm.Weekly'), | |
'Fortnightly' => _t('ContractForm.Fortnightly'), | |
'Four weekly' => _t('ContractForm.FourWeekly'), | |
'Monthly' => _t('ContractForm.Monthly') | |
)), | |
GroupedDropdownField::create('DateOfPayment_Week', 'When are they paid?', array( | |
'Days' => array( | |
'Every Monday' => 'Every Monday', | |
'Every Tuesday' => 'Every Tuesday', | |
'Every Wednesday' => 'Every Wednesday', | |
'Every Thursday' => 'Every Thursday', | |
'Every Friday' => 'Every Friday' | |
) | |
))->displayIf('FrequencyOfPay')->isEqualTo('Weekly')->end(), | |
GroupedDropdownField::create('DateOfPayment_Fortnight', 'When are they paid?', array( | |
'Days' => array( | |
'Every second Monday' => 'Every second Monday', | |
'Every second Tuesday' => 'Every second Tuesday', | |
'Every second Wednesday' => 'Every second Wednesday', | |
'Every second Thursday' => 'Every second Thursday', | |
'Every second Friday' => 'Every second Friday' | |
) | |
))->displayIf("FrequencyOfPay")->isEqualTo("Fortnightly")->end(), | |
GroupedDropdownField::create('DateOfPayment_Fourweek', 'When are they paid?', array( | |
'Days' => array( | |
'Every fourth Monday' => 'Every fourth Monday', | |
'Every fourth Tuesday' => 'Every fourth Tuesday', | |
'Every fourth Wednesday' => 'Every fourth Wednesday', | |
'Every fourth Thursday' => 'Every fourth Thursday', | |
'Every fourth Friday' => 'Every fourth Friday' | |
) | |
))->displayIf("FrequencyOfPay")->isEqualTo("Four weekly")->end(), | |
GroupedDropdownField::create('DateOfPayment_Month', 'When are they paid?', array( | |
'On the...' => array( | |
'Last day of the month' => 'Last day of the month', | |
'Last working day of the month' => 'Last working day of the month', | |
'Last Friday of the month' => 'Last Friday of the month', | |
'Second last working day of the month' => 'Second last working day of the month', | |
'Pay dates will be advised in advance' => 'Pay dates will be advised in advance' | |
), | |
'Dates' => $date_range | |
))->displayIf("FrequencyOfPay")->isEqualTo("Monthly")->end(), | |
DropdownField::create('MethodOfPay', 'How are they paid?', array('BACS' => 'BACS', 'Cheque' => 'Cheque', 'Cash' => 'Cash', 'Credit Transfer' => 'Credit Transfer')), | |
DropdownField::create('WageRateReviewInterval', 'When do you review wage rates?', array( | |
'Annually' => 'Annually (Do not wish to specify date)', | |
'AnnuallyWithDate' => 'Annually (please specify date)', | |
'Quarterly' => 'Quarterly', | |
'No review date' => 'No review date' | |
)), | |
FieldGroup::create(array( | |
DropdownField::create('WageRateReviewIntervalDay', 'Day', array_combine(range(1, 31), range(1, 31))), | |
DropdownField::create('WageRateReviewIntervalMonth', 'Month', $months) | |
))->displayIf("WageRateReviewInterval")->isEqualTo("AnnuallyWithDate")->end(), | |
OptionsetField::create('EmployeesClaimExpenses', null, $yes_no), | |
HeaderField::create('Section_HoursOfWork', _t('ContractForm.Section_HoursOfWork')), | |
OptionsetField::create('SpecifyTotalHoursOrHoursPerDay', 'Specify working hours per day or per week?', array( | |
'Daily' => 'Daily', | |
'Weekly' => 'Weekly' | |
))->setValue('Daily') | |
->setRightTitle('Select \'weekly\' if the employee works flexitime'), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnMon', 'Monday')->setValue(true), | |
TimePickerField::create('MonWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('MonWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("1700") | |
->setAttribute('readonly', true) | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnTue', 'Tuesday')->setValue(true), | |
TimePickerField::create('TueWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('TueWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("1700") | |
->setAttribute('readonly', true) | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnWed', 'Wednesday')->setValue(true), | |
TimePickerField::create('WedWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('WedWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setAttribute('readonly', true) | |
->setValue("1700") | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnThu', 'Thursday')->setValue(true), | |
TimePickerField::create('ThuWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('ThuWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("1700") | |
->setAttribute('readonly', true) | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnFri', 'Friday')->setValue(true), | |
TimePickerField::create('FriWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('FriWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("1700") | |
->setAttribute('readonly', true) | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnSat', 'Saturday'), | |
TimePickerField::create('SatWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('SatWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("1700") | |
->setAttribute('readonly', true) | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
FieldGroup::create(array( | |
CheckboxField::create('WorkingOnSun', 'Sunday'), | |
TimePickerField::create('SunWorkStartTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("0900") | |
->setAttribute('readonly', true), | |
TimePickerField::create('SunWorkEndTime', '') | |
->setConfig('timeformat', 'HH:mm') | |
->setConfig('datavalueformat', 'HH:mm') | |
->setValue("1700") | |
->setAttribute('readonly', true) | |
))->setColumnCount(3) | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end(), | |
OptionsetField::create('EligibleForLunchBreak', 'Is the employee eligible for a lunch break?', $yes_no) | |
->setRightTitle('Select \'Yes\' if they work more than 6 hours in a shift, or if they should be entitled to it as part of their contract)'), | |
DropdownField::create('LunchBreakLength', 'How long do employees get for lunch?', array( | |
'1 hour' => '1 hour', | |
'45 minutes' => '45 minutes', | |
'30 minutes' => '30 minutes', | |
'15 minutes' => '15 minutes' | |
))->displayIf('EligibleForLunchBreak')->isEqualTo('Yes')->end(), | |
OptionsetField::create('IsLunchBreakPaid', 'Is lunch break paid?', $yes_no) | |
->displayIf('EligibleForLunchBreak')->isEqualTo('Yes')->end(), | |
OptionsetField::create('OtherPaidBreaks', 'Are there any other paid breaks?', $yes_no), | |
FieldGroup::create(array( | |
DropdownField::create('NumberOfOtherPaidBreaks', '', array_combine(range(1, 10), range(1, 10)))->setRightTitle('breaks'), | |
DropdownField::create('OtherPaidBreaksLength', '', array_combine(range(5, 30, 5), range(5, 30, 5)))->setRightTitle('minutes each') | |
))->displayIf("OtherPaidBreaks")->isEqualTo("Yes")->end(), | |
OptionsetField::create('OtherUnpaidBreaks', 'Are there any other unpaid breaks?', $yes_no), | |
FieldGroup::create(array( | |
DropdownField::create('NumberOfOtherUnpaidBreaks', '', array_combine(range(1, 10), range(1, 10)))->setRightTitle('breaks'), | |
DropdownField::create('OtherUnpaidBreaksLength', '', array_combine(range(5, 30, 5), range(5, 30, 5)))->setRightTitle('minutes each') | |
))->displayIf("OtherUnpaidBreaks")->isEqualTo("Yes")->end(), | |
TextField::create('ContractedHoursPerWeek_DailyNote', 'Total contracted hours per week') | |
->performReadonlyTransformation() | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Daily')->end() | |
->addExtraClass('highlighted-field'), | |
HiddenField::create('ContractedHoursPerWeek_Daily'), | |
TextField::create('ContractedHoursPerWeek_Weekly', 'Total contracted hours per week') | |
->displayIf('SpecifyTotalHoursOrHoursPerDay')->isEqualTo('Weekly')->end(), | |
OptionsetField::create('ExpectedToWorkShifts', 'Will the employee by expected to work shifts?', $yes_no), | |
OptionsetField::create('ExpectedToWorkNightShifts', 'Will the employee by expected to work night shifts?', $yes_no) | |
->displayIf('ExpectedToWorkShifts')->isEqualTo('Yes')->end(), | |
DropdownField::create('WorkShiftNotification', 'How will the employee be notified of their shifts?', array( | |
'detailed on a weekly rota' => 'detailed on a weekly rota', | |
'advised by your line manager' => 'advised by their line manager', | |
'advised on a noticeboard' => 'advised on a noticeboard' | |
))->displayIf('ExpectedToWorkShifts')->isEqualTo('Yes')->orIf('ExpectedToWorkNightShifts')->isEqualTo('Yes')->end(), | |
HeaderField::create('Section_WorkingTimeDirective', _t('ContractForm.Section_WorkingTimeDirective')), | |
OptionsetField::create('RequiredToWorkMoreThan48Hours', 'Are employees ever required to work more than 48 hours in a week?', $yes_no), | |
FieldGroup::create( | |
HeaderField::create('WorkingTimeOptOutNote', '<em>As you have selected yes, you must offer a working time directive opt out form to the employee which will be provided at the end of the process</em>', 4) | |
) | |
->displayIf('RequiredToWorkMoreThan48Hours')->isEqualTo('Yes')->end(), | |
HeaderField::create('Section_AdditionalHours', _t('ContractForm.Section_AdditionalHours')), | |
OptionsetField::create('RequiredToWorkOvertime', 'Are employees required to work additional hours or overtime?', $yes_no), | |
OptionsetField::create('IsOvertimePaid', 'Is overtime paid?', $yes_no), | |
FieldGroup::create(array( | |
HeaderField::create('OvertimePay_Day', 'Day', 6), | |
HeaderField::create('OvertimePay_Time', 'Time', 6), | |
HeaderField::create('OvertimePay_Rate', 'Rate', 6), | |
DropdownField::create('OvertimeRate_1_Day', '', $overtimepay_days), | |
DropdownField::create('OvertimeRate_1_Time', '', $overtimepay_times), | |
DropdownField::create('OvertimeRate_1_Rate', '', $overtimepay_rates), | |
DropdownField::create('OvertimeRate_2_Day', '', $overtimepay_days)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_2_Time', '', $overtimepay_times)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_2_Rate', '', $overtimepay_rates)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_3_Day', '', $overtimepay_days)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_3_Time', '', $overtimepay_times)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_3_Rate', '', $overtimepay_rates)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_4_Day', '', $overtimepay_days)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_4_Time', '', $overtimepay_times)->setEmptyString(''), | |
DropdownField::create('OvertimeRate_4_Rate', '', $overtimepay_rates)->setEmptyString('') | |
))->setName('WhatRateOvertimePaid') | |
->setColumnCount(3)->displayIf('IsOvertimePaid')->isEqualTo('Yes')->end(), | |
OptionsetField::create('TimeOffGivenForOvertime', null, $yes_no), | |
DropdownField::create('TimeOffGivenForOvertimeLimit', null, array( | |
'within 1 week' => 'within 1 week', | |
'within 1 month' => 'within 1 month', | |
'at mutual convenience' => 'at mutual convenience' | |
))->displayIf('TimeOffGivenForOvertime')->isEqualTo('Yes')->end(), | |
HeaderField::create('Section_PlaceOfWork', _t('ContractForm.Section_PlaceOfWork')), | |
AddressField::create('PlaceOfWork'), | |
OptionsetField::create('RequiredToTravel', 'Will the employee be required to travel as part of their duties?', $yes_no), | |
OptionsetField::create('RequiredToTravelInternational', 'Outside the UK?', $yes_no) | |
->displayIf('RequiredToTravel')->isEqualTo('Yes')->end() | |
); | |
$this->extend('updateFields', $fields); | |
//loop through all top-level fields, check if any i18n values have been defined and set them | |
$i = 0; | |
foreach ($fields as &$field) { | |
if($name = _t('ContractForm.'.$field->Name)) { | |
$field->setTitle($name); | |
} | |
if($description = _t('ContractForm.'.$field->Name.'_help')) { | |
$field->setDescription($description); | |
} | |
if($constraints = $this->getValidator()->getConstraints($field->name)) { | |
if(in_array('Constraint_required', $constraints)) { | |
$field->addExtraClass('required'); | |
} | |
} | |
} | |
self::$fields = $fields; | |
} | |
Requirements::javascript('framework/javascript/DateField.js'); | |
Requirements::javascript($this->ThemeDir()."/js/hours-of-work.js"); | |
Requirements::javascript($this->ThemeDir()."/js/startdate.js"); | |
return self::$fields; | |
} | |
function getValidator() { | |
$validator = ZenValidator::create(); | |
$validator->addRequiredFields(array( | |
'EmployeeName', | |
'EmployeeJobTitle', | |
'EmploymentStartDate', | |
'PlaceOfWork', | |
'HourlyAmount', | |
'SalaryAmount' | |
)); | |
$this->extend('updateValidator', $validator); | |
return $validator; | |
} | |
function onAfterWrite(){ | |
if(isset($_POST['ContractName'])){ | |
$this->Session()->Title = $_POST['ContractName']; | |
$this->Session()->write(); | |
} | |
parent::onAfterWrite(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment