/**
  *
  * @return array
  */
 protected function getFormLabels()
 {
     $requiredMarker = ' <em>*</em>';
     $labels = array('employee' => __('Employee') . $requiredMarker, 'leave_type' => __('Leave Type') . $requiredMarker);
     if (LeavePeriodService::getLeavePeriodStatus() == LeavePeriodService::LEAVE_PERIOD_STATUS_FORCED) {
         $labels['date'] = __('Leave Period') . $requiredMarker;
     } else {
         $labels['date'] = __('Earned Between') . $requiredMarker;
     }
     $labels['entitlement'] = __('Entitlement') . $requiredMarker;
     return $labels;
 }
 public function bulkAssignLeaveEntitlements($employeeNumbers, LeaveEntitlement $leaveEntitlement)
 {
     $conn = Doctrine_Manager::connection();
     $conn->beginTransaction();
     $pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
     try {
         $allEntitlements = array();
         $updateEmpList = array();
         $updateEntitlementIdList = array();
         $savedCount = 0;
         $leaveTypeId = $leaveEntitlement->getLeaveTypeId();
         $fromDate = $leaveEntitlement->getFromDate();
         $toDate = $leaveEntitlement->getToDate();
         $leaveEntitlementSearchParameterHolder = new LeaveEntitlementSearchParameterHolder();
         $leaveEntitlementSearchParameterHolder->setFromDate($fromDate);
         $leaveEntitlementSearchParameterHolder->setLeaveTypeId($leaveTypeId);
         $leaveEntitlementSearchParameterHolder->setToDate($toDate);
         $leaveEntitlementSearchParameterHolder->setEmpIdList($employeeNumbers);
         $leaveEntitlementSearchParameterHolder->setHydrationMode(Doctrine::HYDRATE_ARRAY);
         $entitlementList = $this->searchLeaveEntitlements($leaveEntitlementSearchParameterHolder);
         if (count($entitlementList) > 0) {
             foreach ($entitlementList as $updateEntitlement) {
                 $empNumber = $updateEntitlement['emp_number'];
                 if (!isset($allEntitlements[$empNumber])) {
                     $entitlement = new LeaveEntitlement();
                     $noOfDays = $leaveEntitlement->getNoOfDays();
                     $entitlement->setEmpNumber($empNumber);
                     $entitlement->setLeaveTypeId($leaveTypeId);
                     $entitlement->setCreditedDate($leaveEntitlement->getCreditedDate());
                     $entitlement->setCreatedById($leaveEntitlement->getCreatedById());
                     $entitlement->setCreatedByName($leaveEntitlement->getCreatedByName());
                     $entitlement->setEntitlementType($leaveEntitlement->getEntitlementType());
                     $entitlement->setDeleted(0);
                     $entitlement->setNoOfDays($leaveEntitlement->getNoOfDays());
                     $entitlement->setFromDate($fromDate);
                     $entitlement->setToDate($toDate);
                     $entitlement->setId($updateEntitlement['id']);
                     $allEntitlements[$empNumber] = $entitlement;
                     $updateEmpList[] = $updateEntitlement['emp_number'];
                     $updateEntitlementIdList[] = $updateEntitlement['id'];
                     $savedCount++;
                 }
             }
             $updateQuery = sprintf(" UPDATE ohrm_leave_entitlement SET no_of_days=no_of_days+ %d WHERE id IN (%s)", $leaveEntitlement->getNoOfDays(), implode(',', $updateEntitlementIdList));
             $updateStmt = $pdo->prepare($updateQuery);
             $updateStmt->execute();
         }
         $newEmployeeList = array_diff($employeeNumbers, $updateEmpList);
         if (count($newEmployeeList) > 0) {
             $query = " INSERT INTO ohrm_leave_entitlement(`emp_number`,`leave_type_id`,`from_date`,`to_date`,`no_of_days`,`entitlement_type`) VALUES " . "(?, ?, ?, ?, ?, ?)";
             $stmt = $pdo->prepare($query);
             foreach ($newEmployeeList as $empNumber) {
                 if (!isset($allEntitlements[$empNumber])) {
                     $entitlement = new LeaveEntitlement();
                     $noOfDays = $leaveEntitlement->getNoOfDays();
                     $entitlement->setEmpNumber($empNumber);
                     $entitlement->setLeaveTypeId($leaveEntitlement->getLeaveTypeId());
                     $entitlement->setCreditedDate($leaveEntitlement->getCreditedDate());
                     $entitlement->setCreatedById($leaveEntitlement->getCreatedById());
                     $entitlement->setCreatedByName($leaveEntitlement->getCreatedByName());
                     $entitlement->setEntitlementType($leaveEntitlement->getEntitlementType());
                     $entitlement->setDeleted(0);
                     $entitlement->setNoOfDays($noOfDays);
                     $entitlement->setFromDate($fromDate);
                     $entitlement->setToDate($toDate);
                     $params = array($empNumber, $leaveEntitlement->getLeaveTypeId(), $fromDate, $toDate, $noOfDays, LeaveEntitlement::ENTITLEMENT_TYPE_ADD);
                     $stmt->execute($params);
                     $entitlement->setId($pdo->lastInsertId());
                     $allEntitlements[$empNumber] = $entitlement;
                     $savedCount++;
                 }
             }
         }
         // If leave period is forced, we can bulk assign at once, because from and to date of
         // all leave entitlements will be the same
         $leavePeriodStatus = LeavePeriodService::getLeavePeriodStatus();
         if ($leavePeriodStatus == LeavePeriodService::LEAVE_PERIOD_STATUS_FORCED) {
             $this->bulkLinkLeaveToUnusedLeaveEntitlements($allEntitlements, $leaveTypeId, $fromDate, $toDate);
         } else {
             foreach ($allEntitlements as $leaveEntitlement) {
                 $this->linkLeaveToUnusedLeaveEntitlement($leaveEntitlement);
             }
         }
         $conn->commit();
         return $savedCount;
     } catch (Exception $e) {
         $conn->rollback();
         throw new DaoException($e->getMessage(), 0, $e);
     }
 }
 /**
  *
  * @return array
  */
 protected function getFormLabels()
 {
     $labels = array('employee' => __('Employee'), 'leave_type' => __('Leave Type'));
     if (LeavePeriodService::getLeavePeriodStatus() == LeavePeriodService::LEAVE_PERIOD_STATUS_FORCED) {
         $labels['date'] = __('Leave Period');
     } else {
         $labels['date'] = __('Earned Between');
     }
     return $labels;
 }
 protected function getLeaveEntitlement($values)
 {
     if (isset($values['filters']['bulk_assign'])) {
         $leaveEntitlement = new LeaveEntitlement();
         $leaveEntitlement->setNoOfDays($values['entitlement']);
     } else {
         if (isset($values['id'])) {
             $id = $values['id'];
             $leaveEntitlement = $this->getLeaveEntitlementService()->getLeaveEntitlement($id);
             $leaveEntitlement->setNoOfDays($values['entitlement']);
         } else {
             if (LeavePeriodService::getLeavePeriodStatus() == LeavePeriodService::LEAVE_PERIOD_STATUS_FORCED) {
                 $empNumber = $values['employee']['empId'];
                 $fromDate = $values['date']['from'];
                 $toDate = $values['date']['to'];
                 $leaveTypeId = $values['leave_type'];
                 $entitlementList = $this->getLeaveEntitlementService()->getMatchingEntitlements($empNumber, $leaveTypeId, $fromDate, $toDate);
                 if (count($entitlementList) > 0) {
                     $leaveEntitlement = $entitlementList->getFirst();
                     $newValue = $leaveEntitlement->getNoOfDays() + $values['entitlement'];
                     $leaveEntitlement->setNoOfDays($newValue);
                 } else {
                     $leaveEntitlement = new LeaveEntitlement();
                     $leaveEntitlement->setNoOfDays($values['entitlement']);
                 }
             } else {
                 $leaveEntitlement = new LeaveEntitlement();
                 $leaveEntitlement->setNoOfDays($values['entitlement']);
             }
         }
     }
     if (isset($values['employee']['empId'])) {
         $leaveEntitlement->setEmpNumber($values['employee']['empId']);
     }
     if (isset($values['leave_type'])) {
         $leaveEntitlement->setLeaveTypeId($values['leave_type']);
     }
     $user = $this->getUser();
     $userId = $user->getAttribute('auth.userId');
     $createdBy = $this->getUser()->getAttribute('auth.firstName');
     $leaveEntitlement->setCreditedDate(date('Y-m-d'));
     $leaveEntitlement->setCreatedById($userId);
     $leaveEntitlement->setCreatedByName($createdBy);
     $leaveEntitlement->setEntitlementType(LeaveEntitlement::ENTITLEMENT_TYPE_ADD);
     $leaveEntitlement->setDeleted(0);
     $leaveEntitlement->setNoOfDays(round($leaveEntitlement->getNoOfDays(), 2));
     $leaveEntitlement->setFromDate($values['date']['from']);
     $leaveEntitlement->setToDate($values['date']['to']);
     return $leaveEntitlement;
 }
    /**
     * Renders the widget.
     *
     * @param  string $name        The element name
     * @param  string $value       The date displayed in this widget
     * @param  array  $attributes  An array of HTML attributes to be merged with the default HTML attributes
     * @param  array  $errors      An array of errors for the field
     *
     * @return string An HTML tag string
     *
     * @see sfWidgetForm
     */
    public function render($name, $value = null, $attributes = array(), $errors = array())
    {
        $value = array_merge(array('from' => '', 'to' => ''), is_array($value) ? $value : array());
        if ($value['from'] == '' && $value['to'] == '') {
            // If leave period defined, use leave period start and end date
            $leavePeriod = $this->getLeavePeriodService()->getCurrentLeavePeriodByDate(date('Y-m-d', time()));
            $value['from'] = $leavePeriod[0];
            $value['to'] = $leavePeriod[1];
        }
        $fromWidget = $this->getOption('from_date');
        $fromId = $fromWidget->getAttribute('id');
        if (empty($fromId)) {
            $fromId = $this->generateId($name . '_from');
            $fromWidget->setAttribute('id', $fromId);
        }
        $toWidget = $this->getOption('to_date');
        $toId = $toWidget->getAttribute('id');
        if (empty($toId)) {
            $toId = $this->generateId($name . '_to');
            $toWidget->setAttribute('id', $toId);
        }
        $fromLabelHtml = '';
        $fromLabel = $this->getOption('from_label');
        if (!empty($fromLabel)) {
            $fromLabelHtml = strstr($this->getOption('from_label_template'), array('%from_id%' => $fromId, '%from_label%' => $this->translate($fromLabel)));
        }
        $toLabel = $this->getOption('to_label');
        $toLabelHtml = '';
        if (!empty($toLabel)) {
            $toLabelHtml = strtr($this->getOption('to_label_template'), array('%to_id%' => $toId, '%to_label%' => $this->translate($toLabel)));
        }
        if (LeavePeriodService::getLeavePeriodStatus() == LeavePeriodService::LEAVE_PERIOD_STATUS_FORCED) {
            $choices = is_array($this->getOption('choices')) ? $this->getOption('choices') : $this->getLeavePeriodList();
            $leavePeriodWidget = $this->getOption('leave_period');
            $leavePeriodWidget->setOption('choices', $choices);
            $html = strtr($this->translate($this->getOption('template')), array('%leave_period%' => $leavePeriodWidget->render(null), '%from_date%' => $fromWidget->render($name . '[from]', $value['from'], array('id' => 'date_from')), '%to_date%' => $toWidget->render($name . '[to]', $value['to'], array('id' => 'date_to'))));
            $javaScript = sprintf(<<<EOF
 <script type="text/javascript">

   

    \$(document).ready(function(){
        var intialFrom  = \$('#date_from').val();
        var intialTo    = \$('#date_to').val();
        
        \$('#period').val(intialFrom+'\$\$'+intialTo);
        
        \$('#period').change(function() {
            var selectValue = \$(this).val().split('\$\$');
            \$('#date_from').val(selectValue[0]);
            \$('#date_to').val(selectValue[1]);
          });
        
    });

</script>
EOF
);
            $html .= $javaScript;
        } else {
            $html = strtr($this->translate($this->getOption('template')), array('%from_label%' => $fromLabelHtml, '%to_label%' => $toLabelHtml, '%from_date%' => $fromWidget->render($name . '[from]', $value['from'], array('id' => 'date_from')), '%to_date%' => $toWidget->render($name . '[to]', $value['to'], array('id' => 'date_to'))));
        }
        return $html;
    }
 public function getLeaveBalance($empNumber, $leaveTypeId, $asAtDate = NULL, $date = NULL)
 {
     if (empty($asAtDate)) {
         $asAtDate = date('Y-m-d', time());
     }
     // If end date is not defined, and leave period is forced, use end date of current leave period
     // as the end date for leave balance calculation
     if (empty($date)) {
         $leavePeriodStatus = LeavePeriodService::getLeavePeriodStatus();
         if ($leavePeriodStatus == LeavePeriodService::LEAVE_PERIOD_STATUS_FORCED) {
             $leavePeriod = $this->getLeaveEntitlementStrategy()->getLeavePeriod($asAtDate, $empNumber, $leaveTypeId);
             if (is_array($leavePeriod) && isset($leavePeriod[1])) {
                 $date = $leavePeriod[1];
             }
         }
     }
     return $this->getLeaveEntitlementDao()->getLeaveBalance($empNumber, $leaveTypeId, $asAtDate, $date);
 }