HEX
Server: Apache/2.2.15 (CentOS)
System: Linux ip-10-0-2-146.eu-west-1.compute.internal 2.6.32-754.35.1.el6.centos.plus.x86_64 #1 SMP Sat Nov 7 11:33:42 UTC 2020 x86_64
User: root (0)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: /www/exchange2/exchange/custom_actions/TK17868.php
<?php
  class TK17868
  {
      private $query;
        
      function __construct()
      {
          include_once('../Bin/constants.php');
          include_once('../Bin/init.php');
          require_once(ROOT_FOLDER.'Bin/Security.php');
               
          $this->query = new Bin_Query();
      }
      
      function initHolidays($year)
      {
          $result=array($year.'-01-01',$year.'-03-17',$year.'-12-15',$year.'-12-26');
          
          foreach(array('05','06','08') as $month_id)
          {
              $date_not_found=TRUE;
              $date=strtotime($year.'-'.$month_id.'-01');
              while($date_not_found)
              {
                  if (date('l',$date)=='Monday')
                  {
                      $date_not_found=FALSE;
                      $result[]=date('Y-m-d',$date);
                  }
                  else
                  {
                      $date+=86400;
                  }
              }
          }
          
          $date=strtotime($year.'-10-31');
          
          $date_not_found=TRUE;
          while($date_not_found)
          {
              if (date('l',$date)=='Monday')
              {
                  $date_not_found=FALSE;
                  $result[]=date('Y-m-d',$date);
              }
              else
              {
                  $date-=86400;
              }
          }
          
          return $result;
      }
      
      function addAdjustments($data)
      {
          $this->query->executeQuery('SELECT bank_holidays FROM site_settings WHERE site_setting_id=1');
          
          $static_holidays=$result=array();
          foreach(explode(",",$this->query->records[0]['bank_holidays']) as $date)
          {
              $static_holidays[]=$date;
          }
          
          foreach($data as $adjustment)
          {
              $this->query->executeQuery('SELECT debtors_detail.debtor_id,currencies.currency_code, organisation_details.user_id, organisation_details.organisation_reference_id, IF(organisation_details.organisation_trade_name, organisation_details.organisation_trade_name, organisation_details.organisation_name) as organisation_name
                                            FROM debtors_detail
                                            LEFT JOIN currencies ON currencies.currency_id = debtors_detail.currency_id
                                            LEFT JOIN debtor_relation ON debtor_relation.debtor_id = debtors_detail.debtor_id
                                            LEFT JOIN organisation_details ON organisation_details.user_id = debtor_relation.trader_id
                                            WHERE debtors_detail.debtor_reference_id='.$adjustment[0]);
              if (empty($this->query->records[0]) OR empty($this->query->records[0]['user_id']))
              {
                  echo 'Debtor '.$adjustment[0].' not found'."\r\n";
                  continue;
              }
                                            
              $debtor_details=$this->query->records[0];
              
              if ($debtor_details['currency_code']!=$adjustment[2])
              {
                  echo 'Wrong currency for debtor '.$adjustment[0].', '.$adjustment[2].' vs '.$debtor_details['currency_code']."\r\n";
                  continue;
              }
              
              $transaction_date=strtotime(date('Y-m-t',strtotime($adjustment[1].'-01')));
              
              $bank_holidays=array_merge($this->initHolidays(date('Y',$transaction_date)),$static_holidays);
              
              
              $wrong_date=TRUE;
              while($wrong_date)
              {
                  switch(TRUE)
                  {
                      case(date('l',$transaction_date)=='Saturday'):
                      {
                          $transaction_date-=86400;
                          break;
                      }
                      case (date('l',$transaction_date)=='Sunday'):
                      {
                          $transaction_date-=172800;
                          break;
                      }
                      case (in_array(date('Y-m-d',$transaction_date),$bank_holidays)):
                      {
                          $transaction_date-=86400;
                          break;
                      }
                      default:{
                          $wrong_date=FALSE;
                          break;
                      }
                  }
              }
              
              $ra_type=($adjustment[3]>0)?POSITIVE_RESERVE_ADJUSTMENT:NEGATIVE_RESERVE_ADJUSTMENT;
              
              $this->query->executeQuery('SELECT * 
                                          FROM manual_transactions
                                          WHERE transaction_type IN ('.$ra_type.') AND debtor_id='.$debtor_details['debtor_id'].' AND originator_id='.$debtor_details['user_id'].' AND transaction_date="'.date('Y-m-d',$transaction_date).'"');
              $is_ra_exists=$this->query->records;
              
              if (count($is_ra_exists)>0)
              {
                  echo 'Reserve Adjustment for '.number_format($adjustment[3],2).' exists for debtor '.$adjustment[0].' for '.date('Y-m-d',$transaction_date)."\r\n";
                  continue;
              }
              
              $this->query->updateQuery('INSERT INTO manual_transactions (manual_transaction_id,amount,transaction_type,originator_id,debtor_id,status,interface,transaction_date,created_at,created_by,notes)
                                          VALUES(null,'.abs($adjustment[3]).','.$ra_type.','.$debtor_details['user_id'].','.$debtor_details['debtor_id'].',1,1,"'.date('Y-m-d',$transaction_date).'",NOW(),-1,"Margin Call");');
                                          
               echo 'Reserve Adjustment for '.number_format($adjustment[3],2).' for debtor '.$adjustment[0].' for '.date('Y-m-d',$transaction_date).' added '."\r\n";
              
              if (empty($result[$debtor_details['organisation_reference_id']]))
              {
                  $result[$debtor_details['organisation_reference_id']]=0;
              }
              
              $result[$debtor_details['organisation_reference_id']]+=$adjustment[3];
          }
          
          echo "--------------------------\r\n";
          
          $total_added=0;
          foreach($result as $originator_id=>$amount)
          {
              echo $originator_id.' '.number_format($amount,2)."\r\n";
              $total_added+=$amount;
          }
          
          echo 'Total : '.number_format($total_added,2);
      }
  }
  
  $TK17868 = new TK17868();
  $TK17868->addAdjustments(
    array(
        array('20130711000072','2013-07','GBP',-71.6509526482434),
array('20130711000079','2013-07','GBP',-19.2045009550922),
array('20130711000079','2013-08','GBP',-13.2459267643142),
array('20130715000097','2013-09','GBP',-10.077101551159),
array('20130711000065','2013-09','GBP',-174.20698140364),
array('20130711000067','2013-09','GBP',-29.0644615941882),
array('20130711000072','2013-09','GBP',-133.646198923141),
array('20130711000078','2013-09','GBP',-21.3805117518249),
array('20130711000067','2013-10','GBP',-15.5142157042375),
array('20130711000078','2013-10','GBP',-5.13619474452556),
array('20130711000075','2013-10','GBP',-15.3861806842555),
array('20130924000174','2013-10','GBP',-3.58751568918393),
array('20130711000072','2013-10','GBP',-99.225688426298),
array('20130711000079','2013-10','GBP',-39.5584847842917),
array('20130711000079','2013-11','GBP',-18.7897051164755),
array('20130711000075','2013-11','GBP',-29.4209000877273),
array('20130711000072','2013-11','GBP',-48.3695022699377),
array('20130711000067','2013-11','GBP',1.83167954460719),
array('20130711000071','2013-11','GBP',-41.5818632548062),
array('20130711000078','2013-12','GBP',-22.0444890256286),
array('20130711000065','2013-12','GBP',-156.068502377265),
array('20130711000067','2013-12','GBP',-25.2251401286507),
array('20130711000077','2013-12','GBP',-3.7597273377587),
array('20130711000071','2013-12','GBP',-44.4093194697448),
array('20130711000065','2014-01','GBP',-56.7730403423419),
array('20130924000175','2014-01','GBP',-16.7398018328503),
array('20130711000068','2014-01','GBP',-10.052956654822),
array('20130711000069','2014-01','GBP',0.194714174150723),
array('20130711000072','2014-01','GBP',-70.9953448384811),
array('20130711000075','2014-01','GBP',-6.16605048069653),
array('20130711000067','2014-01','GBP',-9.18938770778153),
array('20130711000079','2014-02','GBP',-13.4863217670557),
array('20130711000072','2014-02','GBP',-22.8095180536953),
array('20130711000075','2014-02','GBP',-20.3129508270429),
array('20130711000076','2014-02','GBP',9.31493103896103),
array('20130711000069','2014-02','GBP',-3.34113033971105),
array('20130711000078','2014-02','GBP',1.12079433769255),
array('20130711000067','2014-02','GBP',-7.40828684572301),
array('20130711000066','2014-02','GBP',6.90083993363321),
array('20130924000175','2014-02','GBP',-30.0673731510161),
array('20130715000097','2014-02','GBP',-9.94793756777398),
array('20130711000065','2014-03','GBP',-357.368273251239),
array('20130711000067','2014-03','GBP',-68.0113130893397),
array('20130711000076','2014-03','GBP',6.08877054545454),
array('20130711000066','2014-03','GBP',58.9052286752452),
array('20130711000069','2014-03','GBP',-30.9740607032975),
array('20130711000079','2014-03','GBP',-33.711850437455),
array('20130715000097','2014-03','GBP',-132.871690199779),
array('20130711000072','2014-03','GBP',-124.686323544984),
array('20130711000074','2014-03','GBP',-21.940431244232),
array('20130711000068','2014-03','GBP',-14.8018982909543),
array('20130711000072','2014-04','GBP',-24.0860800275736),
array('20130715000099','2014-04','GBP',-0.620665499124335),
array('20130715000097','2014-04','GBP',-21.7984542109483),
array('20130711000067','2014-04','GBP',-8.06491410589802),
array('20130711000068','2014-04','GBP',-15.1210846281123),
array('20130711000077','2014-04','GBP',-10.3399563648873),
array('20130711000069','2014-05','GBP',-40.036670561507),
array('20130711000072','2014-05','GBP',-73.344029756658),
array('20130711000071','2014-05','GBP',-41.9585442869526),
array('20130711000075','2014-05','GBP',-21.3294815474315),
array('20130711000068','2014-05','GBP',-15.2729620382919),
array('20130711000067','2014-05','GBP',-6.11942210934441),
array('20130924000175','2014-05','GBP',-3.12134409023263),
array('20130711000065','2014-05','GBP',-75.059131783801),
array('20140110000265','2014-05','GBP',-153.0589919108),
array('20130711000079','2014-05','GBP',-6.59849969452494),
array('20130711000065','2014-06','GBP',-69.622489261342),
array('20130715000097','2014-06','GBP',-36.656886335562),
array('20140110000265','2014-06','GBP',-2.67622855771483),
array('20130711000068','2014-06','GBP',2.19594135360858),
array('20130711000079','2014-06','GBP',-5.64835059469351),
array('20140516000311','2014-06','GBP',-3.72432056198835),
array('20130711000067','2014-06','GBP',-5.737342396021),
array('20130711000072','2014-06','GBP',-43.6580965432952),
array('20140221000277','2014-06','GBP',-178.384270988826),
array('20130711000068','2014-07','GBP',-17.9330354932242),
array('20130711000065','2014-07','GBP',-58.932844324007),
array('20140502000307','2014-07','GBP',-10.1668257323568),
array('20130711000071','2014-07','GBP',-39.1002409261741),
array('20130711000079','2014-07','GBP',-18.2128367935816),
array('20130711000075','2014-07','GBP',-20.0700164296254),
array('20130711000072','2014-07','GBP',-13.3208941537978),
array('20130711000067','2014-07','GBP',-3.31603658494555),
array('20140221000277','2014-07','GBP',-5.78173563625301),
array('20140516000313','2014-07','GBP',-9.55666601778129),
array('20130711000069','2014-07','GBP',-4.95112153846155),
array('20130715000097','2014-07','GBP',-13.6393420458865),
array('20140110000265','2014-07','GBP',-27.0440043565789),
array('20130711000072','2014-08','GBP',-18.1232700309448),
array('20140516000314','2014-08','GBP',-0.718061608903024),
array('20130711000079','2014-08','GBP',-4.40095840839665),
array('20140512000310','2014-08','GBP',-3.44810167052988),
array('20140516000311','2014-08','GBP',-4.33401010398999),
array('20140110000265','2014-08','GBP',-9.55455710193897),
array('20130711000078','2014-08','GBP',83.9644849863354),
array('20130711000067','2014-08','GBP',-22.8590260233461),
array('20140516000313','2014-08','GBP',-14.7092034402299),
array('20130715000097','2014-08','GBP',-0.0647228754663107),
array('20130711000065','2014-08','GBP',-234.096423807469),
array('20140502000307','2014-08','GBP',-6.97841826584164),
array('20140221000277','2014-08','GBP',-17.5305521550568),
array('20130711000071','2014-08','GBP',-8.35801997912073),
array('20130711000078','2014-09','GBP',-0.289764105142734),
array('20130711000072','2014-09','GBP',-83.6839204116689),
array('20140110000265','2014-09','GBP',-34.1916798266346),
array('20130711000066','2014-09','GBP',-10.5713418563372),
array('20130711000068','2014-09','GBP',-47.7973499365501),
array('20140221000277','2014-09','GBP',-33.5860626849154),
array('20130711000077','2014-09','GBP',-3.53455564545101),
array('20130924000175','2014-09','GBP',-1.29177175530665),
array('20140502000307','2014-09','GBP',-0.928932296154153),
array('20130711000079','2014-09','GBP',-1.08167535834574),
array('20130711000065','2014-09','GBP',-24.6686676646709),
array('20130711000067','2014-09','GBP',-48.5143093940421),
array('20130711000075','2014-09','GBP',-18.0969191017966),
array('20140516000313','2014-09','GBP',-13.482341192136),
array('20130715000097','2014-09','GBP',-22.3221200408856),
array('20130711000069','2014-09','GBP',-1.10761650527138),
array('20130711000071','2014-09','GBP',-8.62120421525379),
array('20130711000077','2014-10','GBP',-0.97336777477548),
array('20130711000078','2014-10','GBP',-141.596057835413),
array('20130711000079','2014-10','GBP',-6.57085298033992),
array('20130711000075','2014-10','GBP',-18.1647484251377),
array('20130711000072','2014-10','GBP',-88.2098580772129),
array('20130711000071','2014-10','GBP',-29.6627882850458),
array('20140516000311','2014-10','GBP',-2.72871998303712),
array('20130711000080','2014-10','GBP',-8.10878259478467),
array('20130711000065','2014-10','GBP',-377.222686396488),
array('20130711000067','2014-10','GBP',-18.2063812076783)
    )
  );
  
?>