示例#1
0
	/**
	 * اين تابع قلمهاي مربوط به يک حکم را محاسبه مي نمايد
	 * 
	 */
	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;
	}