420 lines
15 KiB
PHP
420 lines
15 KiB
PHP
<?php
|
|
|
|
define("TABLEID", 'tblAppendGrid');
|
|
|
|
class interestModel
|
|
{
|
|
private $db;
|
|
public $ask;
|
|
public $reply;
|
|
public $positions;
|
|
public $result;
|
|
public $numbers;
|
|
public $i;
|
|
public $sdate;
|
|
public $edate;
|
|
public $amount;
|
|
public $total;
|
|
public $ids;
|
|
public $notes;
|
|
public $counter;
|
|
public $uid;
|
|
|
|
function __construct(){
|
|
$this->db=$GLOBALS['db'];
|
|
}
|
|
|
|
function getRecords(){
|
|
|
|
$this->ask="select id,DATE_FORMAT(date_from,'%d.%m.%Y') as date_from,DATE_FORMAT(date_to,'%d.%m.%Y') as date_to,symbol,rate from ecmpaymentstate_interest where deleted=0 order by position asc";
|
|
|
|
$this->reply=$this->db->query($this->ask);
|
|
while($this->result=$this->db->fetchByAssoc($this->reply)){
|
|
$this->positions[]=$this->result;
|
|
}
|
|
|
|
return $this->positions;
|
|
}
|
|
|
|
function createNumber(){
|
|
$this->numbers=explode(",",$_REQUEST[TABLEID.'_rowOrder']);
|
|
}
|
|
|
|
function getPost(){
|
|
$tmp=array();
|
|
$this->positions=array();
|
|
$this->i=0;
|
|
foreach ($this->numbers as $val){
|
|
$tmp['rate']=$_REQUEST[TABLEID.'_rate_'.$val];
|
|
$tmp['date_from']=date('Y-m-d',strtotime($_REQUEST[TABLEID.'_date_from_'.$val.'_date']));
|
|
$tmp['date_to']=date('Y-m-d',strtotime($_REQUEST[TABLEID.'_date_to_'.$val.'_date']));
|
|
$tmp['symbol']=$_REQUEST[TABLEID.'_symbol_'.$val];
|
|
$tmp['position']=$this->i;
|
|
$tmp['id']=$_REQUEST[TABLEID.'_id_'.$val]!='' ? $_REQUEST[TABLEID.'_id_'.$val] : create_guid();
|
|
|
|
$this->saveRecord($tmp);
|
|
unset($tmp);
|
|
$this->i++;
|
|
}
|
|
}
|
|
|
|
function deleteOld(){
|
|
$this->db->query("delete from ecmpaymentstate_interest");
|
|
}
|
|
|
|
function saveRecord($tmp){
|
|
$this->ask='INSERT INTO ecmpaymentstate_interest SET ';
|
|
foreach ($tmp as $key=>$val){
|
|
$this->ask.=$key.'="'.$val.'", ';
|
|
}
|
|
$this->ask.='deleted=0';
|
|
$this->db->query($this->ask);
|
|
}
|
|
|
|
function saveRecords()
|
|
{
|
|
$this->deleteOld();
|
|
$this->createNumber();
|
|
$this->getPost();
|
|
}
|
|
|
|
function getInterestTable(){
|
|
$this->positions=array();
|
|
$this->ask="select * from ecmpaymentstate_interest where
|
|
(date_from >= '".$this->sdate."' or date_to >= '".$this->sdate."')
|
|
and (date_from <= '".$this->edate."' or date_to <= '".$this->edate."')";
|
|
|
|
$this->reply=$this->db->query($this->ask);
|
|
while($this->result=$this->db->fetchByAssoc($this->reply)){
|
|
$this->positions[]=$this->result;
|
|
}
|
|
// var_dump($this->positions);
|
|
}
|
|
|
|
function daybeetwen($date,$date2){
|
|
|
|
$date1 = new DateTime($date);
|
|
$date2 = new DateTime(date('Y-m-d', strtotime($date2)));
|
|
|
|
return $diff = $date2->diff($date1)->format("%a");
|
|
}
|
|
function calculateRate($typ,$dni,$proc ){
|
|
if($typ=='R')$typ='365';
|
|
if($typ=='M')$typ='30';
|
|
return (($dni/$typ)*($proc/100)*$this->amount);
|
|
}
|
|
function calculateInterest(){
|
|
$this->total=0;
|
|
for($i=0;$i<count($this->positions);$i++){
|
|
if($i==0){
|
|
if(strtotime($this->positions[$i]['date_from'])<strtotime($this->sdate)){
|
|
$this->positions[$i]['date_from']=date('Y-m-d', strtotime($this->sdate.' + 1 day'));
|
|
}
|
|
if(strtotime($this->positions[$i]['date_from'])==strtotime($this->sdate)){
|
|
$this->positions[$i]['date_from']=date('Y-m-d', strtotime($this->sdate.' + 1 day'));
|
|
}
|
|
//$this->positions[$i]['date_from']=$this->sdate;
|
|
|
|
|
|
|
|
if(strtotime($this->positions[$i]['date_to'])>strtotime($this->edate)){
|
|
$this->positions[$i]['date_to']=$this->edate;
|
|
|
|
$this->positions[$i]['days']=$this->daybeetwen($this->positions[$i]['date_from'],$this->edate);
|
|
|
|
} else {
|
|
$this->positions[$i]['days']=$this->daybeetwen($this->positions[$i]['date_from'],$this->positions[$i]['date_to']);
|
|
}
|
|
$this->positions[$i]['amount']=$this->calculateRate($this->positions[$i]['symbol'],$this->positions[$i]['days'],$this->positions[$i]['rate']);
|
|
$this->positions[$i]['date_from']=date('d.m.Y',strtotime($this->positions[$i]['date_from']));
|
|
$this->positions[$i]['date_to']=date('d.m.Y',strtotime($this->positions[$i]['date_to']));
|
|
$this->total+=$this->positions[$i]['amount'];
|
|
}
|
|
else {
|
|
if(strtotime($this->positions[$i]['date_from'])<strtotime($this->sdate)){
|
|
$this->positions[$i]['date_from']=$this->sdate;
|
|
}
|
|
if(strtotime($this->positions[$i]['date_from'])==strtotime($this->sdate)){
|
|
$this->positions[$i]['date_from']=$this->sdate;
|
|
}
|
|
//$this->positions[$i]['date_from']=$this->sdate;
|
|
|
|
|
|
|
|
if(strtotime($this->positions[$i]['date_to'])>strtotime($this->edate)){
|
|
$this->positions[$i]['date_to']=$this->edate;
|
|
$this->positions[$i]['days']=$this->daybeetwen($this->positions[$i]['date_from'],$this->edate);
|
|
} else {
|
|
$this->positions[$i]['days']=$this->daybeetwen($this->positions[$i]['date_from'],$this->positions[$i]['date_to']);
|
|
}
|
|
$this->positions[$i]['amount']=$this->calculateRate($this->positions[$i]['symbol'],$this->positions[$i]['days'],$this->positions[$i]['rate']);
|
|
$this->positions[$i]['date_from']=date('d.m.Y',strtotime($this->positions[$i]['date_from']));
|
|
$this->positions[$i]['date_to']=date('d.m.Y',strtotime($this->positions[$i]['date_to']));
|
|
$this->total+=$this->positions[$i]['amount'];
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function rozbijDate($tmp){
|
|
$date=array();
|
|
|
|
$date[0]=date("Y",strtotime($tmp));
|
|
$date[1]=date("n",strtotime($tmp));
|
|
$date[2]=date("j",strtotime($tmp));
|
|
|
|
return $date;
|
|
}
|
|
|
|
function checkDate($tmp){
|
|
$tmp=$this->rozbijDate($tmp);
|
|
|
|
while($this->workingDayOfYear(time(), true, mktime(0,0,0,$tmp[1],$tmp[2],$tmp[0]))!=false){
|
|
|
|
$tmp = date('Y-m-d', strtotime($this->sdate.' + 1 day'));
|
|
|
|
$this->sdate=$tmp;
|
|
$tmp=$this->rozbijDate($tmp);
|
|
}
|
|
|
|
}
|
|
|
|
function loadDates($par = true){
|
|
$this->sdate=date("Y-m-d",strtotime($_REQUEST['payment_date']));
|
|
$this->edate=date("Y-m-d",strtotime($_REQUEST['payment_after_date']));
|
|
if($par==true){
|
|
$this->amount=$this->number_unformat($_REQUEST['amount'],false,',','.')/100;
|
|
} else {
|
|
$this->amount=$_REQUEST['amount'];
|
|
}
|
|
}
|
|
|
|
function json2array(){
|
|
$this->ids=explode(",",$_REQUEST['id_list']);
|
|
array_pop($this->ids);
|
|
}
|
|
|
|
function json2array2($id){
|
|
$this->ids=explode(",",$id);
|
|
array_pop($this->ids);
|
|
}
|
|
|
|
function getDatesMonitFromId($id){
|
|
|
|
$this->ask=$this->db->query("
|
|
SELECT t.payment_date as '0',t.value as '2',t.name,t.value FROM ecmtransactions t
|
|
WHERE t.type='0'
|
|
AND t.register_date > '2011-12-31'
|
|
and t.id='".$id."'
|
|
ORDER BY t.register_date desc");
|
|
|
|
|
|
$this->result=$this->db->fetchByAssoc($this->ask);
|
|
}
|
|
|
|
function getDatesFromId($id){
|
|
$this->ask=$this->db->query("
|
|
SELECT t.payment_date as '0',t.value as '2',t2.payment_date as '1',t.name,t.value FROM ecmtransactions t
|
|
inner join ecmtransactions_rel r on ( r.ecmtransaction_a_id=t.id or r.ecmtransaction_b_id=t.id)
|
|
inner join ecmtransactions t2 on
|
|
(case r.ecmtransaction_b_id when t.id then t2.id=r.ecmtransaction_a_id else t2.id=r.ecmtransaction_b_id end)
|
|
WHERE t.type='0'
|
|
AND t.register_date > '2011-12-31'
|
|
and t.settled=1
|
|
and t.payment_date < t2.payment_date and t.id='".$id."'
|
|
ORDER BY t.register_date desc");
|
|
|
|
|
|
$this->result=$this->db->fetchByAssoc($this->ask);
|
|
}
|
|
|
|
function createRecord($name,$value){
|
|
|
|
$tmp=array();
|
|
$tmp['total']=0;
|
|
$tmp['days']=0;
|
|
for ($i = 0; $i < count($this->positions); $i++) {
|
|
$tmp['total']+=$this->positions[$i]['amount'];
|
|
$tmp['days']+=$this->positions[$i]['days'];
|
|
}
|
|
$tmp['from']=$this->positions[0]['date_from'];
|
|
$tmp['to']=$this->positions[count($this->positions)-1]['date_to'];
|
|
$tmp['name']=$name;
|
|
$tmp['paid']=$value;
|
|
$tmp['position']=$this->counter;
|
|
$this->counter++;
|
|
$this->notes[]=$tmp;
|
|
}
|
|
|
|
function createID(){
|
|
$this->uid=create_guid();
|
|
}
|
|
|
|
function updateRecord($id){
|
|
|
|
$this->db->query("update ecmtransactions set note=1, note_id='".$this->uid."' where id='".$id."'");
|
|
}
|
|
|
|
function makeNotes(){
|
|
$this->notes=array();
|
|
$this->json2array();
|
|
if(count($this->ids)>0){
|
|
$this->counter=0;
|
|
$this->createID();
|
|
foreach ($this->ids as $val){
|
|
|
|
$this->getDatesFromId($val);
|
|
$name=$this->result['name'];
|
|
$value=$this->result['value'];
|
|
$this->calculateRecordsToNote($this->result['0'],$this->result['1'],$this->result['2']);
|
|
$this->createRecord($name,$value);
|
|
$this->updateRecord($val);
|
|
}
|
|
}
|
|
include 'modules/EcmPaymentStates/createPDF.php';
|
|
createEcmPaymentStatePdf($this->ids[0],'BROSWER',$this->notes,$this->uid);
|
|
|
|
}
|
|
function makeMonit($id,$t=false){
|
|
$this->notes=array();
|
|
$this->json2array2($id);
|
|
if(count($this->ids)>0){
|
|
$this->counter=0;
|
|
// $this->createID();
|
|
foreach ($this->ids as $val){
|
|
|
|
$this->getDatesMonitFromId($val);
|
|
$name=$this->result['name'];
|
|
$value=$this->result['value'];
|
|
$this->calculateRecordsToNote($this->result['0'],date("Y-m-d"),$this->result['2']);
|
|
$this->createRecord($name,$value);
|
|
|
|
// $this->updateRecord($val);
|
|
}
|
|
}
|
|
if($t==true){
|
|
$b='BROSWER';
|
|
} else {
|
|
$b='FILE';
|
|
}
|
|
include 'modules/EcmPaymentStates/createPDF.php';
|
|
return createEcmPaymentStatePdf2($this->ids[0],$b,$this->notes);
|
|
|
|
}
|
|
function checkPost($start,$end,$amount){
|
|
$_REQUEST['payment_date']=$start!='' ? $start : $_REQUEST['payment_date'];
|
|
$_REQUEST['payment_after_date']=$end!='' ? $end : $_REQUEST['payment_after_date'];
|
|
$_REQUEST['amount']=$amount!='' ? $amount : $_REQUEST['amount'];
|
|
}
|
|
|
|
function calculateRecordsToNote($start,$end,$amount){
|
|
$this->checkPost($start,$end,$amount);
|
|
$this->loadDates(false);
|
|
|
|
$this->checkDate($this->sdate);
|
|
$this->getInterestTable();
|
|
$this->calculateInterest();
|
|
|
|
return $this->positions;
|
|
}
|
|
|
|
function calculateRecords(){
|
|
|
|
$this->loadDates(true);
|
|
|
|
|
|
$this->checkDate($this->sdate);
|
|
|
|
$this->getInterestTable();
|
|
$this->calculateInterest();
|
|
|
|
return $this->positions;
|
|
}
|
|
|
|
function number_unformat($number, $force_number = true, $dec_point = '.', $thousands_sep = ',') {
|
|
if ($force_number) {
|
|
$number = preg_replace('/^[^\d]+/', '', $number);
|
|
} else if (preg_match('/^[^\d]+/', $number)) {
|
|
return false;
|
|
}
|
|
$type = (strpos($number, $dec_point) === false) ? 'int' : 'float';
|
|
$number = str_replace(array($dec_point, $thousands_sep), array('.', ''), $number);
|
|
settype($number, $type);
|
|
return $number;
|
|
}
|
|
|
|
|
|
function workingDayOfYear($timeStamp = null, $freeSaturdays = true, $extraFreeDays = array(), $extraWorkingDays = array())
|
|
{
|
|
$freeHolidayDays = 0;
|
|
$addWorkingDays = 0;
|
|
$timeStamp = is_null($extraFreeDays) ? time() : $extraFreeDays;
|
|
$firstDayOfYear = date('w', mktime(0,0,0,1,1,date('Y', $timeStamp)));
|
|
$dayOfYear = date('z', $timeStamp)+1;
|
|
|
|
$year = date('Y', $timeStamp);
|
|
$day = date('j', $timeStamp);
|
|
$mon = date('n', $timeStamp);
|
|
$easterDay = easter_date($year);
|
|
$extraWorkingDays = (array)$extraWorkingDays;
|
|
$extraFreeDays = (array)$extraFreeDays;
|
|
|
|
/*
|
|
od aktualnego tygonia roku odejmujemy 1
|
|
bo aktualny tydzien nie jest jeszcze zakonczony
|
|
*/
|
|
|
|
$passedWeekends = (int)date('W', $timeStamp)-1;
|
|
$freeWeekendDays= $passedWeekends;
|
|
|
|
/*
|
|
funkcja date('W') liczy tygonie w roku rozpoczynajac od poniedzialku
|
|
stad, jezeli 1 stycznia wypada w niedziele odejmujemy jeden tydzien
|
|
jezeli wypada pozniej niz w poniedzialek, dodajemy jeden tydzien
|
|
*/
|
|
|
|
if($firstDayOfYear == 0)
|
|
{ $passedWeekends--;
|
|
}
|
|
else if ($firstDayOfYear > 1)
|
|
{ $passedWeekends++;
|
|
}
|
|
|
|
/*
|
|
lista dni ustawowo wolnych od pracy wg.
|
|
Ustawa z dnia 18 stycznia 1951 r. o dniach wolnych od pracy.
|
|
(Dz.U. 1951 nr 4 poz. 28) z pozniejszymi zmianami
|
|
isip.sejm.gov.pl/servlet/Search?todo=file&id=WDU19510040028&type=3&name=D9510028.pdf
|
|
*/
|
|
|
|
$freeDaysArray = array(
|
|
mktime(0,0,0,1,1,$year), // nowy rok
|
|
mktime(0,0,0,1,6,$year), // trzech króli
|
|
$easterDay, // pierwszy dzien wielkiej nocy
|
|
$easterDay + 86400, // drugi dzien wielkiej nocy
|
|
mktime(0,0,0,5,1,$year), // 1 maja
|
|
mktime(0,0,0,5,3,$year), // 3 maja
|
|
$easterDay + (60*86400), // boze cialo
|
|
$easterDay + (49*86400), // zielone swiatki
|
|
mktime(0,0,0,8,15,$year), // 15 sierpnia
|
|
mktime(0,0,0,11,1,$year), // 1 listopada
|
|
mktime(0,0,0,11,11,$year), // 11 listopada
|
|
mktime(0,0,0,12,25,$year), // 25 grudnia
|
|
mktime(0,0,0,12,26,$year) // 26 grudnia
|
|
);
|
|
|
|
$weekDay = date('w', $extraFreeDays[0]);
|
|
|
|
$return2= array_search($extraFreeDays[0], $freeDaysArray);
|
|
if($weekDay == 0 || $weekDay == 6 || $return2){
|
|
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|
|
?>
|