db = $db; if($data) { $this->data = $data; if($this->data['el_pohon']) { //elektromotor nema objem $this->data['objem'] = 0; } } } function set_particip($value) { $this->data['particip'] = $value; } function set_particip_hp($value) { $this->data['particip_hp'] = $value; } //realizuje vypocet POV function calculate_pov() { $this->comp_id = 15; //ID e-finance motor $rhis->rate_id = $this->get_rate_for('Allianz'); $this->sazby = $this->get_zakladni_sazba(); $this->segmentace = $this->get_segmentation(); $this->use_PSLPOV(); $datumPrvniRegistrace = explode(".", $this->data['datumPrvniRegistrace']); $this->car_age = $this->get_months_age($datumPrvniRegistrace); $this->get_coefs(); // echo "
";
//		var_export($this->sazby);
//		var_export($this->discounts);
//		echo "
"; } function sazby2return() { foreach ($this->sazby as $k=>$v) { if($this->only_PSL) { $this->sazby[$k]['icompanies_id'] = 16; } else { $this->sazby[$k]['icompanies_id'] = $this->comp_id; } $this->sazby[$k]['icompanies_limits_id'] = $v['limit']; $this->sazby[$k]['spoluucast'] = $v['particip']; $this->sazby[$k]['pripojisteni'] = $this->pripojisteni; $this->sazby[$k]['return_coef'] = $this->map_all_perc_koef_POV($v['return_coef']); $this->sazby[$k]['return_coef']['pr_tech_sleva_prirazka'] = $this->tech_sleva_prirazka; } if(count($this->sazby) == 1 && $this->data['remote_N1']) { $this->sazby = array_pop($this->sazby); } } //ziskani koeficientu slev function get_coefs() { $this->coefs = $temp = null; //sleva za historicke vozidlo $this->tech_sleva_prirazka = 100; if($this->data['historicke_vozidlo'] == 2) { //se zvlastni SPZ $temp['koef'] = (1 - ($this->segmentace['HV02'] / 100)); $this->tech_sleva_prirazka -= $this->segmentace['HV02']; $temp['perc'] = $this->segmentace['HV02']; $temp['perc_key'] = 'pr_hist'; $temp['text_vyp_pov'] = 'Sleva pro vozidla vyrobena do roku 1952 '.$this->segmentace['HV02'].'% '; $this->coefs[] = $temp; } elseif($this->data['historicke_vozidlo'] == 1) { // r.v. do roku 1952 $temp['koef'] = (1 - ($this->segmentace['HV01'] / 100)); $this->tech_sleva_prirazka -= $this->segmentace['HV01']; $temp['perc'] = $this->segmentace['HV01']; $temp['perc_key'] = 'pr_hist'; $temp['text_vyp_pov'] = 'Sleva pro vozidla vyrobena do roku 1952 '.$this->segmentace['HV01'].'% '; $this->coefs[] = $temp; } //sleva za spoluucast if($this->data['particip'] == 'S01') { $temp['koef'] = (1 - ($this->segmentace['S01'] / 100)); $this->tech_sleva_prirazka -= $this->segmentace['S01']; $temp['particip'] = '5.000 Kč'; $temp['perc'] = $this->segmentace['S01']; $temp['perc_key'] = 'pr_spoluucast'; $temp['text_vyp_pov'] = 'Sleva za spoluúčast ve výšši 5.000 Kč '.$this->segmentace['S01'].'% '; $this->coefs[] = $temp; } elseif($this->data['particip'] == 'S02') { $temp['koef'] = (1 - ($this->segmentace['S02'] / 100)); $this->tech_sleva_prirazka -= $this->segmentace['S02']; $temp['particip'] = '10.000 Kč'; $temp['perc'] = $this->segmentace['S02']; $temp['perc_key'] = 'pr_spoluucast'; $temp['text_vyp_pov'] = 'Sleva za spoluúčast ve výšši 10.000 Kč '.$this->segmentace['S02'].'% '; $this->coefs[] = $temp; } //prirazka za pouziti vozidla if($this->segmentace[$this->data['pouziti_vozidla']]) { $temp['koef'] = (1 + ($this->segmentace[$this->data['pouziti_vozidla']] / 100)); $this->tech_sleva_prirazka += $this->segmentace[$this->data['pouziti_vozidla']]; $temp['perc'] = $this->segmentace[$this->data['pouziti_vozidla']]; $temp['perc_key'] = 'pr_riziko_provoz'; $temp['text_vyp_pov'] = 'Prirážka za použití vozidla '.$this->segmentace[$this->data['pouziti_vozidla']].'% '; $this->coefs[] = $temp; } } //------------------- /* * Plosni sleva na zakladni sazby */ function use_PSLPOV() { if($this->segmentace['PSLPOV_a'] && $this->segmentace['PSLPOV'] > 0) { foreach ($this->sazby as $k=>$v) { $this->sazby[$k]['pojistne'] = $v['sazba'] * (1 - ($this->segmentace['PSLPOV'] / 100)); $this->sazby[$k]['text_vyp_pov'].= '
Plošní sleva '.$this->segmentace['PSLPOV'].'%: '; $this->sazby[$k]['text_vyp_pov'].= $v['sazba'].' * '.(1 - ($this->segmentace['PSLPOV'] / 100)).' = '.$this->sazby[$k]['pojistne']; } } } //pouziti moznych slev function use_coefs($sazba_key) { foreach ($this->coefs as $k_coef=>$coef) { //foreach ($this->sazby as $k=>$v) { $v = $this->sazby[$sazba_key]; $this->sazby[$sazba_key]['return_coef'][$coef['perc_key']] = $coef['perc']; $this->sazby[$sazba_key]['text_vyp_pov'].= '
'.$coef['text_vyp_pov'].': '; $this->sazby[$sazba_key]['text_vyp_pov'].= $v['pojistne'].' * '.$coef['koef']; $this->sazby[$sazba_key]['pojistne'] = $v['pojistne'] * $coef['koef']; $this->sazby[$sazba_key]['text_vyp_pov'].= ' = '.$this->sazby[$sazba_key]['pojistne']; if($coef['particip']) { $this->sazby[$sazba_key]['particip'] = $coef['particip']; } //} } } //----------------- //nastavi lhutni platby a podobne function prepare_sazby() { if(isset($this->sazby[0])) { foreach ($this->sazby as $k=>$v) { $this->sazby[$k]['pojistne'] = ceil($this->sazby[$k]['pojistne']); if($this->data['forma_platby'] == 'LP01' || !$this->data['forma_platby']) { $this->sazby[$k]['lhutni_pojistne'] = $v['pojistne']; //rocni } elseif($this->data['forma_platby'] == 'LP02') { $this->sazby[$k]['lhutni_pojistne'] = ceil(($v['pojistne'] / 2)); //pololetni } elseif($this->data['forma_platby'] == 'LP03') { $this->sazby[$k]['lhutni_pojistne'] = ceil(($v['pojistne'] / 4)); //ctvrtletni } } } else { $this->sazby['pojistne'] = ceil($this->sazby['pojistne']); if($this->data['forma_platby'] == 'LP01' || !$this->data['forma_platby']) { $this->sazby['lhutni_pojistne'] = $this->sazby['pojistne']; //rocni } elseif($this->data['forma_platby'] == 'LP02') { $this->sazby['lhutni_pojistne'] = ceil(($this->sazby['pojistne'] / 2)); //pololetni } elseif($this->data['forma_platby'] == 'LP03') { $this->sazby['lhutni_pojistne'] = ceil(($this->sazby['pojistne'] / 4)); //ctvrtletni } } } //------------------------ /** * Vrati koeficient bezeskodniho prubehu * < 1 pro bonus, >1 pro malus * * @param array $rates pole segmentace * @param string $bp vybrany bezeskodni prubeh(B0,B1,.., M1) */ public function getB_M($bp) { $ret=1; if(isset($this->segmentace[$bp])) { if(preg_match("/^B/",$bp)) { $bonus = $this->segmentace[$bp]; $ret=(1 - ($bonus/100)); } elseif(preg_match("/^M/",$bp)) { $malus = $this->segmentace[$bp]; $ret=(1 + ($malus/100)); } } return $ret; } public function get_discount_B_M($bp) { $koef_b_m = $this->getB_M($bp); $temp = null; if($koef_b_m < 1) { //bonus $temp['koef'] = $koef_b_m; $temp['text_vyp_pov'] = 'Sleva za bezeškodní průběh '.$this->segmentace[$bp].'%: '; } elseif($koef_b_m > 1) { //bonus $temp['koef'] = $koef_b_m; $temp['text_vyp_pov'] = 'Prirážka za škodný průběh '.$this->segmentace[$bp].'%: '; } if($temp) { $temp['key'] = 'BM'; $temp['perc'] = $this->segmentace[$bp]; } return $temp; } //vrati BM pre HAV Allianz - ktera ma jiny bonus pro HAV a jiny pro POV function get_discount_B_M_allianz_HAV($bp) { if($bp == 'B0S') { return false; } $sql = "SELECT value FROM `".DB_D."`.allianzBonus WHERE name = '".$bp."' LIMIT 1"; $res = mysqli_query($this->db, $sql); $row = mysqli_fetch_array($res); $obchSlevy += $row['value']; if($row['value'] > 0) { $temp['koef'] = (1 - ($row['value']/100)); $temp['text_vyp'] = 'Sleva za bezeškodní průběh '.$row['value'].'%: '; } elseif($row['value'] < 0) { $row['value'] *= -1; $temp['koef'] = (1 + ($row['value']/100)); $temp['text_vyp'] = 'Prirážka za škodný průběh '.$row['value'].'%: '; } $temp['perc'] = $row['value']; $temp['key'] = 'BM'; return $temp; } //------------------ function get_rate_for($comp) { $method = 'get_rate_for_'.$comp; if(method_exists($this,$method)) { return call_user_method($method,$this); } } //vrati cislo sazebniku na zaklade PSC pro Allianz function get_rate_for_Allianz() { //var_export($this->data); if($this->data['subjekt'] == 2) { $ret = 101; /* podnikatel alebo pravnicka osoba, na regione NEZALEZI */ } else { if($this->is_praha($this->data['psc'])) { if( date('y-m-d') <= '2010-06-30' && strtotime($this->data['pocatek_date_sql']) < strtotime('2010-12-31')) { $this->prazske_jaro = 0.85; } $ret = 102; //praha } else if(($this->data['psc'] >= 25000 && $this->data['psc'] <= 25499) || // okolí Prahy - Praha východ, Praha západ ($this->data['psc'] >= 30100 && $this->data['psc'] <= 32699) || ($this->data['psc'] >= 33200 && $this->data['psc'] <= 33399) || ($this->data['psc'] >= 33441 && $this->data['psc'] <= 33699) || // -Plzeň + Plzeň-jih ($this->data['psc'] >= 37000 && $this->data['psc'] <= 37599) || // -České Budějovice ($this->data['psc'] >= 40002 && $this->data['psc'] <= 40399) || // -Ústí nad Labem ($this->data['psc'] >= 46001 && $this->data['psc'] <= 46312) || // -Liberec ($this->data['psc'] >= 50000 && $this->data['psc'] <= 50499) || // -Hradec Králové ($this->data['psc'] >= 60200 && $this->data['psc'] <= 66434) || // -Brno ($this->data['psc'] >= 70000 && $this->data['psc'] <= 72599) || // -Ostrava ($this->data['psc'] >= 77200 && $this->data['psc'] <= 78599) // -Olomouc ) { // Mesta nad 90 tis. ob. $ret = 103; if($this->data['psc'] >= 25000 && $this->data['psc'] <= 25499) { if( date('y-m-d') <= '2010-06-30' && strtotime($this->data['pocatek_date_sql']) < strtotime('2010-12-31')) { $this->prazske_jaro = 0.85; } } } else { $ret = 104; } } return $ret; } // END = vrati cislo sazebniku na zaklade PSC pro Allianz function get_limit_id_by_val($value) { $value = explode("/",$value); $sql = "SELECT id FROM ".DB.".gt_icompanies_limits WHERE icompanies_id = ".$this->comp_id." AND health = ".$value[0]." AND property = ".$value[1]; $res = mysqli_query($this->db, $sql); $row = mysqli_fetch_array($res); return $row['id']; } // function get_vehicle_number() public function get_vehicle_number($valid_from = false,$valid_to=false) { $this->data['objem'] = preg_replace("/,/",".",$this->data['objem']); $this->data['hmotnost'] = preg_replace("/,/",".",$this->data['hmotnost']); $this->data['vykon'] = preg_replace("/,/",".",$this->data['vykon']); if($this->data['ostatni'] != 1) { //pokud nepojistujeme ostatni if($this->data['hmotnost'] > 0) { $hmotnost_query = "( weight_from <= ".$this->data['hmotnost']." || ISNULL(weight_from) ) && ( weight_to >= ".$this->data['hmotnost']." || ISNULL(weight_to) ) &&"; } else { $hmotnost_query=""; } /* ak je druh vozidla "Trikolky nebo ctyrkolky", je potrebne zistit, do ktorej hmotnostnej kategorie patri specifikovane vozidlo */ if($this->data['druhVozidla'] == "1100" && $this->data['hmotnost'] > 400) { /* hmotnost je vacsia ako 400 kg (kategoria nad 400 kg) */ $druhVozidla = 1150; } elseif($this->data['druhVozidla'] == "1100" && $this->data['hmotnost'] <= 400) { /* hmotnost neprasahuje 400 kg (kategoria do 400 kg vcetne) */ $druhVozidla = 1100; } elseif($this->data['druhVozidla'] == "1200" || $this->data['druhVozidla'] == "1000") { $hmotnost_query = ""; $druhVozidla = $this->data['druhVozidla']; } else { /* nie je potrebne menit @number druhu vozidla */ $druhVozidla = $this->data['druhVozidla']; } if($this->data['el_pohon'] == 1) { $plus_query = " && ci_rate_subcategories.electro = 1"; } else { $plus_query = ""; } $objem = $this->data['objem']; $wh_valid=" (ci_ratesval.valid_from <= '".$valid_from."' AND ci_ratesval.valid_to >= '".$valid_to."') "; $query = "SELECT ci_rate_subcategories.category, ci_rate_subcategories.number, ci_rate_subcategories.name as subcategory_name, ci_rate_categories.name as category_name FROM `".DB."`.`ci_rate_categories`, `".DB."`.`ci_rate_subcategories`, `".DB."`.`ci_ratesval` WHERE ( ".(($plus_query == "") ? " ( ( cubature_from <= ".$objem." || ISNULL(cubature_from) ) && ( cubature_to >= ".$objem." || ISNULL(cubature_to) ) && ".$hmotnost_query." ( category = ".$druhVozidla.") ) && " : "( cubature_from = -1 && cubature_to = -1 ".$plus_query." ) && ")." ( ( ci_rate_subcategories.number = ci_ratesval.item_id && ci_ratesval.icompanies_id = ".$this->comp_id." && ci_ratesval.aval = 1 && ".$wh_valid." ) ) && ( ( ci_rate_categories.number = ".$druhVozidla." ) ) ) GROUP BY ci_rate_subcategories.number"; } else { /* tato podmienka riesi vyber "Ostatni" */ /* @number druhov, ktorych @number sa dalej NECLENI v tabulke `ci_rate_subcategories` */ $categories = Array ( 1300, 1400, 1500, 1800, 1900, 2000, 2100, 2200, 2300 ); /* @number druhov, ktorych @number sa dalej CLENI v tabulke `ci_rate_subcategories` */ $subcategories = Array ( 1000, 1710, 1720, 2210, 2400); $druh_vozu=$this->data['druhVozidla']; $druh_cleneni=$this->data['druh_cleneni']; if(in_array($druh_vozu, $categories)) { $query = "SELECT number, name as category_name FROM `".DB."`.`ci_rate_categories` WHERE ( number = ".$druh_vozu." )"; } elseif(in_array($druh_vozu, $subcategories)) { $objem_sql=$hmotnost_sql=$cleneni_sql=""; if($this->data['objem']) { $objem_sql=" ( cubature_from <= ".$this->data['objem']." || ISNULL(cubature_from) ) && ( cubature_to >= ".$this->data['objem']." || ISNULL(cubature_to) ) && "; } if($this->data['hmotnost']) { $hmotnost_sql=" ( weight_from <= ".$this->data['hmotnost']." || ISNULL(weight_from) ) && ( weight_to >= ".$this->data['hmotnost']." || ISNULL(weight_to) ) && "; } if($druh_cleneni) { $cleneni_sql = " AND ci_rate_subcategories.number='".$druh_cleneni."' "; } $query = "SELECT ci_rate_subcategories.category, ci_rate_subcategories.number, ci_rate_subcategories.name as subcategory_name, ci_rate_categories.name as category_name FROM `".DB."`.`ci_rate_categories`, `".DB."`.`ci_rate_subcategories`, `".DB."`.`ci_ratesval` WHERE ( ( ".$objem_sql." ".$hmotnost_sql." ( category = ".$druh_vozu." ) ".$cleneni_sql." ) && ( ( ci_rate_subcategories.number = ci_ratesval.item_id && ci_ratesval.icompanies_id = ".$this->comp_id." && ci_ratesval.aval = 1 ) ) && ( ( ci_rate_categories.number = ".$druh_vozu." ) ) ) GROUP BY ci_rate_subcategories.number"; } } $exec = mysqli_query($this->db, $query); $result = mysqli_fetch_array($exec); return $result; } /* * Vrati segmentaci */ public function get_segmentation() { $pocatekPoj_sql=$this->check_is_valid_segmentation($this->data['pocatek_date_sql']); $wh_valid="(ci_segmentation.valid_from <= '".$pocatekPoj_sql."' AND ci_segmentation.valid_to >= '".$pocatekPoj_sql."')"; $sql = "SELECT `data` FROM `".DB."`.`ci_segmentation` WHERE (`icompanies_id` = ".$this->comp_id." && ".$wh_valid.")"; $res = mysqli_query($this->db, $sql); $row = mysqli_fetch_array($res); // obsahuje kompletnu segmentaciu podla kodov v manager.e-finance.eu // return unserialize($row['data']); } //-------------------- /** * kontroluje jestli existuje segmentace pre dane obdobi pocatku smlouvy * pokud jeste neni naplnen, nebo se nemenil, zmeni $pocatekPoj_sql * na posledni den validity danej pojistnej segemntace, * zmeneni hodnoty nema vplyv na hodnotu pocatku pojisteni, * * @param date $pocatekPoj_sql datum puvodniho pocatku pojisteni */ public function check_is_valid_segmentation($pocatekPoj_sql) { $sql = "SELECT `data` FROM `".DB."`.`ci_segmentation` WHERE (`icompanies_id` = ".$this->comp_id." AND ( ci_segmentation.valid_from <= '".$pocatekPoj_sql."' AND ci_segmentation.valid_to >= '".$pocatekPoj_sql."' ) ) LIMIT 1"; $res = mysqli_query($this->db, $sql); $rows = mysqli_num_rows($res); //pokial nic nenasiel, tak ziskame posledny zadany sadzobnik pojistovni if($rows>0) { return $pocatekPoj_sql; } else { $sql="SELECT ci_segmentation.valid_to FROM `wpdb_pojisteni_com`.`ci_segmentation` WHERE ( ci_segmentation.icompanies_id = ".$this->comp_id." ) ORDER BY ci_segmentation.valid_to DESC LIMIT 1"; $res = mysqli_query($this->db, $sql); $row = mysqli_fetch_array($res); return $row['valid_to']; } } //---------------------------------------- /* * Vrati zakladni sazbu pro pojistovne */ public function get_zakladni_sazba() { $pocatekPoj_sql = $this->check_is_valid_rate($this->data['pocatek_date_sql']); $this->vehicle_values = $this->get_vehicle_number($pocatekPoj_sql,$pocatekPoj_sql); $wh_valid="(ci_ratesval.valid_from <= '".$pocatekPoj_sql."' AND ci_ratesval.valid_to >= '".$pocatekPoj_sql."') && "; if($this->rate_id != '') { $add_reg = "&& ( ci_ratesval.rate_id = ".$this->rate_id." )"; } else { $add_reg = ""; } $add_limit = ''; if($this->limit_id) { $add_limit = " AND ci_ratesval.limit_id = ".$this->limit_id; } $sql = "SELECT gt_icompanies_limits.id as icompanies_limits_id, gt_icompanies_limits.name as insurance_limit, gt_icompanies_limits.health, gt_icompanies_limits.property, ci_ratesval.value FROM `".DB."`.`gt_icompanies_limits`, `".DB."`.`ci_ratesval` WHERE ( ( ci_ratesval.item_id = " . $this->vehicle_values['number'] . " ) && ( ci_ratesval.icompanies_id = ".$this->comp_id." ) && ".$wh_valid." ( gt_icompanies_limits.id = ci_ratesval.limit_id ) ".$add_reg." ".$add_limit." ) " . " GROUP BY icompanies_limits_id ORDER BY gt_icompanies_limits.place ASC"; $res = mysqli_query($this->db, $sql); $zakladni_sazba = Array(); while($sazba_r = mysqli_fetch_array($res)) { if($sazba_r['value'] != 0) { $zakladni_sazba[] = Array( "limit" => $sazba_r['icompanies_limits_id'], "sazba" => $sazba_r['value'], "pojistne" => $sazba_r['value'] ); } } return $zakladni_sazba; } //-------------------------------------------- /** * kontroluje jestli existuje sadzobnik pre dane obdobi pocatku smlouvy * pokud jeste neni naplnen, nebo se nemenil, zmeni $pocatekPoj_sql * na posledni den validity daneho pojistneho sazebniku, * * @param date $pocatekPoj datum puvodniho pocatku pojisteni */ public function check_is_valid_rate($pocatekPoj,$ret_valid_from = false) { $sql="SELECT ci_ratesval.value,ci_ratesval.valid_to,ci_ratesval.valid_from FROM `".DB."`.`ci_ratesval` WHERE ( ( ci_ratesval.icompanies_id = ".$this->comp_id." ) AND ( ci_ratesval.valid_from <= '".$pocatekPoj."' AND ci_ratesval.valid_to >= '".$pocatekPoj."' ) ) LIMIT 1"; $res = mysqli_query($this->db, $sql); $rows = mysqli_num_rows($res); //pokial nic nenasiel, tak ziskame posledny zadany sadzobnik pojistovni if($rows>0) { $row = mysqli_fetch_array($res); if($ret_valid_from) return $row['valid_from']; else return $row['valid_to']; } else { $sql="SELECT ci_ratesval.valid_to FROM `".DB."`.`ci_ratesval` WHERE ( ci_ratesval.icompanies_id = ".$this->comp_id." ) ORDER BY ci_ratesval.valid_to DESC LIMIT 1"; $res = mysqli_query($this->db, $sql); $row = mysqli_fetch_array($res); if($ret_valid_from) return $row['valid_from']; else return $row['valid_to']; } } //---- function get_DP() { } public function is_praha($psc) { return ($psc >= 10000 && $psc <= 19999); } public function get_months_age($datum) { if(!is_array($datum)) { if(preg_match("/-/",$datum)) { $datum = explode("-",$datum); } elseif(preg_match("/./",$datum)) { $datum = explode(".",$datum); } } $carAge = date("Y") - $datum[2]; $months = 0; if(date("n") < $datum[1]) { $carAge--; $months += (12 - ($datum[1] - date("n"))); } else if(date("n") == $datum[1]) { if(date("j") < $datum[0]) { $months--; } elseif(date("j") >= $datum[0]) { $months++; } } else { $months += (date("n") - $datum[1]); if(date("j") > $datum[0]) { $months++; } } $months += ($carAge * 12); return $months; } function get_age_from_date($date) { if(!$date) return false; if(!preg_match("/-/",$date) && preg_match("/./",$date)) { $date = date("Y-m-d",strtotime($date)); } list($year,$month,$day) = explode("-",$date); $year_diff = date("Y") - $year; $month_diff = date("m") - $month; $day_diff = date("d") - $day; if ($day_diff < 0 || $month_diff < 0) { $year_diff--; } return $year_diff; } function GetNextDays($datecalc,$duedays) { $i = 1; while ($i <= $duedays) { $datecalc += 86400; // Add a day. $date_info = getdate( $datecalc ); if (($date_info["wday"] == 0) or ($date_info["wday"] == 6) ) { $datecalc += 86400; // Add a day. continue; } $i++; } return $datecalc ; } } ?>