示例#1
0
	private function compute_salary_other_premium($writ_rec) {

		//$param1 گروه معادل استخدام كشوري افراد
		//$param2 افزايش سنواتي سال جاري
		//$param3 افزايش سنواتي سال قبل
		//$param4 ضريب فوق العاده شغل .
		//$param5 ضريب فوق العاده جذب

		$worker_salary = $this->compute_writ_items_sum($writ_rec["writ_id"], $writ_rec["writ_ver"], $writ_rec["staff_id"]
				, '( ' . SIT_WORKER_BASE_SALARY . ' , ' . SIT_WORKER_ANNUAL_INC . ')');

		// ________________________________________
		//compute_other_premium_base_salary
		$rial_coef = manage_salary_params::get_salaryParam_value("", $writ_rec["person_type"].",101", SPT_RIAL_COEF, $writ_rec['execute_date']);
		if (!$rial_coef) {
			parent::PushException(RIAL_COEF_NOT_FOUND);
			return false;
		}

		$worker_emp_base_salary = $rial_coef * manage_writ_item::Get_employee_base_number($this->param1);
		//_________________________________________

		$worker_emp_annual_inc = $this->param2;
		$worker_emp_job_extra = $this->param4 * $worker_emp_base_salary;

		//_________________________________________
		//compute_other_premium_min_salary

		$min_sal_value = manage_salary_params::get_salaryParam_value("", $writ_rec["person_type"].",101", SPT_MIN_SALARY, $writ_rec['execute_date']);
		$worker_emp_min_salary = max($min_sal_value - ($worker_emp_base_salary + $worker_emp_annual_inc + $worker_emp_job_extra), 0);
		//_________________________________________
		//compute_other_premium_absorb_extra
		$worker_emp_absorb_extra = $this->param5 *
				($worker_emp_base_salary + $worker_emp_annual_inc + $worker_emp_job_extra + $worker_emp_min_salary);
		//_________________________________________
		//compute_other_premium_bad_weather_extra
		$worker_emp_bad_wheader = 0;

		if ($writ_rec['emp_mode'] == EMP_MODE_ENGAGEMENT || $writ_rec['emp_mode'] == EMP_MODE_EDUCATIONAL_MISSION)
			$worker_emp_bad_wheader = 0;

		$this->param1 = manage_salary_params::get_salaryParam_value("", $writ_rec["person_type"].",101", SPT_WHEATHER_COEF, $writ_rec['execute_date']);
		if (!$this->param1) {
			parent::PushException('WHEATHER_COEF_NOT_FOUND');
			$worker_emp_bad_wheader = 0;
		}
		$value = $this->param1 * $worker_emp_base_salary;
		if (!($value > 0)) {
			parent::PushException('WHEATHER_ITEM_CALC_ERR');
			$worker_emp_bad_wheader = 0;
		}
		//_________________________________________
		//compute_other_premium_8_9_absorb
		//// محاسبه فوق العاده جذب بندهاي 8 و 9
		// به دست آوردن اولين روز سال قبل
		$this_writ_year = substr(DateModules::Miladi_to_Shamsi($writ_rec['execute_date']), 0, 4);
		$one_year_ago = $this_writ_year - 1;
		$one_year_ago_first_day = $one_year_ago . "/01/01";
		$Gone_year_ago_first_day = DateModules::Shamsi_to_Miladi($one_year_ago_first_day);

		// ضريب ريالي سال قبل
		$rial_coef = manage_salary_params::get_salaryParam_value("", $writ_rec["person_type"].",101", SPT_RIAL_COEF, $Gone_year_ago_first_day);
		if (!$rial_coef) {
			parent::PushException('RIAL_COEF_NOT_FOUND');
			return false;
		}

		// حقوق پايه سال قبل
		$prior_base_salary = $rial_coef * manage_writ_item::Get_employee_base_number($this->param1);

		// افزايش سنواتي سال قبل
		$prior_annual_inc = $this->param3;

		//فوق العاده شغل سال قبل
		$prior_job_extra = $prior_base_salary * $this->param4;

		// حداقل دريافتي سال قبل
		$min_sal_value = manage_salary_params::get_salaryParam_value("", $writ_rec["person_type"].",101", SPT_MIN_SALARY, $Gone_year_ago_first_day);
		$prior_min_salary = max($min_sal_value - ($prior_base_salary + $prior_annual_inc + $prior_job_extra), 0);

		// جمع اقلام مرتبط با فوق العاده تعديل
		$adjust_sal_items_sum = $prior_base_salary + $prior_annual_inc + $prior_job_extra + $prior_min_salary;

		// محاسبه فوق العاده تعديل سال قبل
		$max_value = manage_writ_item::Get_employee_base_number(1) * $rial_coef * 1.5;
		if ($adjust_sal_items_sum <= 3000000)
			$value = $max_value;
		elseif ($adjust_sal_items_sum >= 5700000)
			$value = 0;
		else
			$value = (1 - (intval(($adjust_sal_items_sum - 3000000) / 300000) + 1) * 0.1) * $max_value;

		$worker_emp_8_9_absorb = $value * 1.5;
		//_________________________________________

		$worker_emp_salary =
				$worker_emp_base_salary +
				$worker_emp_annual_inc +
				$worker_emp_job_extra +
				$worker_emp_min_salary +
				$worker_emp_absorb_extra +
				$worker_emp_bad_wheader +
				$worker_emp_8_9_absorb;

		$this->param6 = $worker_salary;

		$this->param7 = 'حقوق پايه:' . intval($worker_emp_base_salary) . '<br>' .
				'سنوات:' . intval($worker_emp_annual_inc) . '<br>' .
				'ف شغل:' . intval($worker_emp_job_extra) . '<br>' .
				'حداقل:' . intval($worker_emp_min_salary) . '<br>' .
				'ف جذب:' . intval($worker_emp_absorb_extra) . '<br>' .
				'ف بدي آب و هوا:' . intval($worker_emp_bad_wheader) . '<br>' .
				'جذب 8 و 9 ر:' . intval($worker_emp_8_9_absorb) . '<br>' .
				'جمع:' . intval($worker_emp_salary);

		$this->param2 = CurrencyModulesclass::toCurrency($this->param2);
		$value = max((11 / 12) * $worker_emp_salary - $worker_salary, 0);

		if (!($value > 0))
			return false;
		return $value;
	}