/** * اين تابع قلمهاي مربوط به يک حکم را محاسبه مي نمايد * */ public static function compute_writ_items($writ_id, $writ_ver, $staff_id, $reComputeFlag = false) { //__________________________________________ //کنترل معتبر بودن کد و نسخه حکم $curWrit = new manage_writ($writ_id, $writ_ver, $staff_id); if (empty($curWrit->writ_id)) { parent::PushException(WRIT_NOT_FOUND); return false; } if ($curWrit->salary_pay_proc != BENEFIT_CUT) { if (!$reComputeFlag) { //__________________________________________ //first delete all current rows parent::runquery(" delete from HRM_writ_salary_items where writ_id=$writ_id AND writ_ver=$writ_ver AND staff_id= $staff_id"); //__________________________________________ //copy all of prior writ items to this writ $prior_writ_Obj = $curWrit->get_prior_writ("","","2013-02-19"); if (!empty($prior_writ_Obj->writ_id)) { $query = "SELECT wsi.salary_item_type_id, wsi.param1, wsi.param2, wsi.param3, wsi.param4, wsi.param5, wsi.param6, wsi.param7, wsi.value, wsi.base_value, wsi.automatic, wsi.remember_date, wsi.remember_message, wsi.remembered FROM HRM_writ_salary_items wsi LEFT OUTER JOIN HRM_salary_item_types sit ON (wsi.salary_item_type_id = sit.salary_item_type_id) WHERE writ_id = " . $prior_writ_Obj->writ_id . " AND writ_ver = " . $prior_writ_Obj->writ_ver . " AND staff_id = " . $prior_writ_Obj->staff_id . " AND validity_start_date <= '" . $curWrit->execute_date . "'AND (validity_end_date >= '" . $curWrit->execute_date . "' OR validity_end_date IS NULL OR validity_end_date = '0000-00-00' ) ORDER BY ComputeOrder "; $all_items = PdoDataAccess::runquery_fetchMode($query); // $all_items = parent::runquery($query ); //______________________________________________________________ // // //درج قلم هاي حکم قبلي براي اين حکم for ($i = 0; $i < $all_items->rowCount(); $i++) { $ItemRow = $all_items->fetch(); $current_itemRecord = $ItemRow; $wsi_object = new manage_writ_item(); parent::FillObjectByArray($wsi_object, $current_itemRecord); $wsi_object->writ_id = $curWrit->writ_id; $wsi_object->writ_ver = $curWrit->writ_ver; $wsi_object->staff_id = $curWrit->staff_id; $return = $wsi_object->AddWritItem(); if ($return === false) { return false; } } } } /*if (!manage_writ::is_auto_writ($curWrit->execute_date, $curWrit->person_type)) return true; */ $WsiObj = new manage_writ_item(); $return = $WsiObj->compute_automatic_writ_salary_items($curWrit); if ($return === false) { return false; } $WsiObj->compute_semi_automatic_writ_salary_items($curWrit); /*if ($curWrit->person_type == HR_EMPLOYEE) { unset($WsiObj); $WsiObj = new manage_writ_item(); $return = $WsiObj->compute_automatic_writ_salary_items($curWrit,"1"); if ($return === false) { return false; } } */ //______________________________________________________________ //بر اساس روال پرداخت حقوق نحوه پرداخت اقلام حقوقي کنترل مي شود require_once 'writ_subtype.class.php'; $writTypes_obj = new manage_writ_subType($curWrit->person_type, $curWrit->writ_type_id, $curWrit->writ_subtype_id); if (!$curWrit->salary_pay_proc) $curWrit->salary_pay_proc = $writTypes_obj->salary_pay_proc; if ($curWrit->salary_pay_proc) { switch ($curWrit->salary_pay_proc) { case BENEFIT_CUT : if (!manage_writ_item::RemoveWritItem(" writ_id=" . $curWrit->writ_id . " AND writ_ver=" . $curWrit->writ_ver . " AND staff_id=" . $curWrit->staff_id)) { parent::PushException(CAN_NOT_DELETE_SALARY_ITEMS); return false; } break; case ONLY_BASE_SALARY_PAY : switch ($curWrit->person_type) { case HR_PROFESSOR : $salary_item_type_id = SIT_PROFESSOR_BASE_SALARY; break; case HR_EMPLOYEE : $salary_item_type_id = SIT_STAFF_BASE_SALARY; break; case HR_WORKER : $salary_item_type_id = SIT_WORKER_BASE_SALARY; break; } if (!manage_writ_item::RemoveWritItem("writ_id=" . $curWrit->writ_id . " AND writ_ver=" . $curWrit->writ_ver . " AND salary_item_type_id != " . $salary_item_type_id . " AND staff_id = " . $staff_id)) { parent::PushException(CAN_NOT_DELETE_SALARY_ITEMS); return false; } break; case ONLY_CONTINUES_SALARY_PAY : $dt = manage_writ_item::get_continouse_salary_items($curWrit->writ_id, $curWrit->writ_ver, $curWrit->staff_id); $items = ""; for ($i = 0; $i < count($dt); $i++) $items .= $dt[$i]["salary_item_type_id"] . ","; $items = ($items != "") ? substr($items, 0, strlen($items) - 1) : ""; //........................................ if ($items != "") { if (!manage_writ_item::RemoveWritItem(" writ_id =" . $curWrit->writ_id . " AND writ_ver =" . $writ_ver . " AND staff_id =" . $curWrit->staff_id . " AND salary_item_type_id NOT IN (" . $items . ")")) { parent::PushException(CAN_NOT_DELETE_SALARY_ITEMS); return false; } } break; case CONTINUES_SALARY_RETIRED_HALF_BENEFIT_PAY : case CONTINUES_SALARY_HALF_BENEFIT_RETIRED_PAY : case CONTINUES_SALARY_HALF_BENEFIT_FRACTION_PAY : $dt = manage_writ_item::get_continouse_salary_items($curWrit->writ_id, $curWrit->writ_ver, $curWrit->staff_id); $items = ""; for ($i = 0; $i < count($dt); $i++) $items .= $dt[$i]["salary_item_type_id"] . ","; $items = ($items != "") ? substr($items, 0, strlen($items) - 1) : ""; //........................................ if ($items != "") { $query = "update HRM_writ_salary_items set value = value * 0.5 where writ_id = " . $curWrit->writ_id . " AND writ_ver = " . $curWrit->writ_ver . " AND staff_id = " . $curWrit->staff_id . " AND salary_item_type_id in (" . $items . ")"; parent::runquery($query); } break; case BENEFIT_PAY : case BENEFIT_WITHOUT_EXTRAWORK : case BENEFIT_EXIT_IN_WRIT_NOT_EXIST_IN_PAYMENT : break; } } if ($curWrit->worktime_type == HALF_TIME) $WsiObj->compute_half_time_salary_items($curWrit->corrective_writ_id, $curWrit->corrective_writ_ver, $curWrit->execute_date); if ($curWrit->worktime_type == QUARTER_TIME) $WsiObj->compute_quarter_time_salary_items($curWrit->corrective_writ_id, $curWrit->corrective_writ_ver, $curWrit->execute_date); } //__________________________________________ //اعمال تغييرات با توجه به ايجاد و کامل شدن قلم هاي حکم جديد $is_auto_writ = $curWrit->is_auto_writ($curWrit->execute_date, $curWrit->person_type); if ($is_auto_writ) manage_writ::change_writ_state($curWrit->state, WRIT_PERSONAL, $curWrit->writ_id, $curWrit->writ_ver, $curWrit->staff_id, $curWrit->execute_date); else { if ($curWrit->history_only != 1) manage_writ::change_writ_state($curWrit->state, $curWrit->state, $curWrit->writ_id, $curWrit->writ_ver, $curWrit->staff_id, $curWrit->execute_date); } return true; }