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/exchange0old/exchange/classes/Controller/COrpa.php
<?php

/**
 * Created by PhpStorm.
 * User: Admin
 * Date: 23.09.2016
 * Time: 13:18
 */
class Controller_COrpa
{
    public function Controller_COrpa()
    {
        if (!isset($_SESSION['user']['userid']))
            header("Location:?do=login");

        include_once(ROOT_FOLDER . 'classes/Model/MHelpers.php');
        include_once(ROOT_FOLDER . 'classes/Model/MUserOrpa.php');
        include_once(ROOT_FOLDER . 'classes/Model/MTrade.php');
        include_once(ROOT_FOLDER . 'classes/Model/MOriginatorApplication.php');

        $originatorModel = new Model_MOriginatorApplication();
        $orpaEnabled = $originatorModel->isOrpaEnabled($_SESSION['user']['userid']);
        if ($orpaEnabled === false) {
            header("Location:?do=originatorhome");
        }
    }

    public function createOetr()
    {
        include_once("classes/Model/MTrade.php");
        include_once("classes/Lib/HandleErrors.php");

        $help = Model_MTrade::getHelpLinks(27);
        $sweepTime = Model_MHelpers::clearSweepOutTime();
        $agreed_rate = Model_MTrade::getAgreedRate();
        $credit_agreed_rate = Model_MTrade::getCreditAgreedRate();

        $output = array();
        if (!empty($Err->values)) {
            $output['messages'] = $Err->messages;
            $output['values'] = $Err->values;
        }
        $output['help'] = $help;
        $output['usr'] = $_SESSION["user"]["username"];
        $output['clearSweepIn'] = $sweepTime['clearSweepIn'];
        $output['clearSweepOut'] = $sweepTime['clearSweepOut'];
        $output['values']['discount_price']			= $agreed_rate;
        $output['values']['buyout_discount_price']	= $credit_agreed_rate;

        unset($_SESSION['orpa_file_support']);

        Bin_Template::createTemplate('create_orpa.html', $output);
    }

    public function editOetr()
    {
        include_once("classes/Model/MTrade.php");
        include_once("classes/Lib/HandleErrors.php");

        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];
        $trade = new Model_MUserOrpa();
        $checkOetr = $trade->checkOrpa($orpaId, $originatorId);
        if ($checkOetr === false) {
            header("Location:?do=originatorhome");
        }

        $help = Model_MTrade::getHelpLinks(27);
        $sweepTime = Model_MHelpers::clearSweepOutTime();
        $agreed_rate = Model_MTrade::getAgreedRate();
        $credit_agreed_rate = Model_MTrade::getCreditAgreedRate();

        $output = array();
        if (!empty($Err->values)) {
            $output['messages'] = $Err->messages;
            $output['values'] = $Err->values;
        }
        $output['orpa'] = $trade->getOrpaById($orpaId);
        $output['po_documents'] = $trade->getPoByOrpaId($orpaId);
        $output['help'] = $help;
        $output['usr'] = $_SESSION["user"]["username"];
        $output['clearSweepIn'] = $sweepTime['clearSweepIn'];
        $output['clearSweepOut'] = $sweepTime['clearSweepOut'];
        $output['values']['discount_price']			= $agreed_rate;
        $output['values']['buyout_discount_price']	= $credit_agreed_rate;

        unset($_SESSION['orpa_file_support']);

        Bin_Template::createTemplate('create_orpa.html', $output);
    }

    public function saveOetr()
    {
        include_once('classes/Model/Validation/CheckInputs.php');
        include_once('classes/Model/Validation/FormValidation.php');
        include_once('classes/Model/MTrade.php');

        $security = new Bin_Security();
        $security->escapePost();

        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];
        $trade = new Model_MUserOrpa();
        $checkOetr = $orpaId ? $trade->checkOrpa($orpaId, $originatorId) : true;
        if ($checkOetr === false) {
            header("Location:?do=originatorhome");
        }

        new Model_Validation_CheckInputs('save_orpa');

        $organisationRates = Model_MTrade::getOrganisationRates();
        $data = array(
            'orpa_id' => $orpaId,
            'originator_id' => $_SESSION['user']['userid'],
            'edso' => $_POST['edso'],
            'orpa_date' => date('Y-m-d'),
            'ex_date' => $_POST['ex_year'] . '-' . $_POST['ex_month'] . '-' . $_POST['ex_date'],
            'created_by' => $_SESSION['user']['userid'],
            'modified_by' => $_SESSION['user']['userid'],
            'status' => isset($_POST['submit']) ? Model_MUserOrpa::STATUS_SUBMITTED : Model_MUserOrpa::STATUS_CREATED,
            'd_etr_sell_rate' => Bin_Array::get($organisationRates, 'agreed_rate'),
            'c_etr_sell_rate' => Bin_Array::get($organisationRates, 'credit_agreed_rate'),
            'd_etr_purchase_discount' => Bin_Array::get($organisationRates, 'purchase_price'),
            'c_etr_early_payment_discount' => Bin_Array::get($organisationRates, 'c_etr_early_payment_discount'),
            'friendly_name'=>$_POST['friendly_name']
        );

        $fileSupport = Bin_Array::get($_SESSION, 'orpa_file_support');
        if ($fileSupport) {
            $data['file_support'] = $fileSupport;
        }

        $orpaId = $trade->saveOrpa($data);

        unset($_SESSION['orpa_file_support']);

        if (isset($_POST['save'])) {
            header("Location:?do=upload_revolving_oetr&orpa_id=" . $orpaId);
        } else {
            header("Location:?do=oetr_list");
        }
    }

    public function uploadOetrPo()
    {
        include_once('classes/Model/MTrade.php');

        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];
        $trade = new Model_MUserOrpa();
        $checkOetr = $trade->checkOrpa($orpaId, $originatorId);
        if ($checkOetr === false) {
            header("Location:?do=originatorhome");
        }

        $help = Model_MTrade::getHelpLinks(27);
        $debtor = Model_MTrade::getRevolvingDebtor('debtor');
        for ($i = 0; $i < count($debtor); $i++) {
            if ($debtor[$i]['trade_name'] != '' && $debtor[$i]['debtor_name'] == '') {
                $split_trade = $debtor[$i]['trade_name'];
                $debtor[$i]['debtor_name'] = $split_trade;
            } elseif ($debtor[$i]['trade_name'] != '' && $debtor[$i]['debtor_name'] != '') {
                $debtor[$i]['debtor_name'] = substr($debtor[$i]['trade_name'], 0, 14) . ' - ' . substr($debtor[$i]['debtor_name'], 0, 12);
            } else {
                $debtor[$i]['debtor_name'] = $debtor[$i]['debtor_name'];
            }
        }
        $poDocuments = $trade->getPoByOrpaId($orpaId);

        $output = array(
            'debtor' => $debtor,
            'orpa_id' => $orpaId,
            'orpa' => $trade->getOrpaById($orpaId),
            'po_documents' => $poDocuments,
            'help' => $help,
        );
        Bin_Template::createTemplate('upload_orpa_po.html', $output);
    }

    public function saveUploadOetrPo()
    {
        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $debtorIds = (isset($_REQUEST['debtor_id']) and is_array($_REQUEST['amount'])) ? $_REQUEST['debtor_id'] : array();
        $currencyIds = (isset($_REQUEST['currency_id']) and is_array($_REQUEST['currency_id'])) ? $_REQUEST['currency_id'] : array();
        $amounts = (isset($_REQUEST['amount']) and is_array($_REQUEST['amount'])) ? $_REQUEST['amount'] : array();
        $poNumbers = (isset($_REQUEST['po']) and is_array($_REQUEST['po'])) ? $_REQUEST['po'] : array();
        $files = (isset($_FILES['file_po']) and is_array($_FILES['file_po'])) ? $_FILES['file_po'] : array();
        $originatorId = $_SESSION['user']['userid'];

        $trade = new Model_MUserOrpa();
        foreach ($debtorIds as $key => $debtorId) {
            $checkOetr = $trade->checkOrpa($orpaId, $originatorId);
            $checkDebtor = $trade->checkDebtor($debtorId, $originatorId);
            if (!$checkOetr || !$checkDebtor) {
                header("Location:?do=originatorhome");
            }

            $data = array(
                'orpa_id' => $orpaId,
                'debtor_id' => $debtorId,
                'currency_id' => $currencyIds[$key],
            );
            $filesData = array(
                array(
                    'amount' => $amounts[$key],
                    'po' => $poNumbers[$key],
                    'file_po' => array(
                        'name' => $files['name'][$key],
                        'tmp_name' => $files['tmp_name'][$key],
                    )
                ),
            );

            $trade->savePoFiles($data, $filesData);
        }

        header("Location:?do=oetr_list");
    }

    public function validateUploadOetrPo()
    {
        include_once('classes/Model/Validation/CheckInputs.php');
        include_once('classes/Model/Validation/FormValidation.php');

        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];

        $trade = new Model_MUserOrpa();
        $checkOetr = $trade->checkOrpa($orpaId, $originatorId);
        if (!$checkOetr) exit();

        new Model_Validation_CheckInputs('save_upload_orpa');
    }

    public function validateRevolvingOetrPo()
    {
        include_once('classes/Model/Validation/CheckInputs.php');
        include_once('classes/Model/Validation/FormValidation.php');

        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];

        $trade = new Model_MUserOrpa();
        $checkOetr = $orpaId ? $trade->checkOrpa($orpaId, $originatorId) : true;
        if (!$checkOetr) exit();

        new Model_Validation_CheckInputs('save_revolving_orpa');
    }

    public function oetrReport()
    {
        $orpaId = (int)$_REQUEST['orpa_id'];
        $xls    = isset($_REQUEST['xls']) ? (int)$_REQUEST['xls'] : 0;

        $model = new Model_MOrpa();

        if( $xls )
        {
            $template = new Bin_Template();
            $template_name = 'reports/orpa_report_excel.html';
            $output = array(
                'report' => $model->getReportData($orpaId, $_SESSION['user']['userid'])
            );

            $html = $template->createTemplate($template_name, $output, false);

            require('classes/Lib/PHPExcel.php');
            $filename = "DownloadReport_o_etr_" . date('Y_m_d_H_i') . '.xlsx';
            $table = utf8_encode($html);

            ini_set('zlib.output_compression','Off');
            header("Pragma: public");
            header("Expires: 0");
            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            header("Content-Type: application/force-download");
            header("Content-Type: application/octet-stream");
            //the folowing two lines make sure it is saved as a xls file
            header('Content-type: application/vnd.ms-excel');
            header('Content-Disposition: attachment; filename='.$filename);

            // save $table inside temporary file that will be deleted later
            $tmpfile = tempnam(sys_get_temp_dir(), 'html');
            file_put_contents($tmpfile, $table);

            // insert $table into $objPHPExcel's Active Sheet through $excelHTMLReader
            /**
             * @var $excelHTMLReader PHPExcel_Reader_HTML
             */
            $objPHPExcel     = new PHPExcel();
            $excelHTMLReader = PHPExcel_IOFactory::createReader('HTML');
            $excelHTMLReader->loadIntoExisting($tmpfile, $objPHPExcel);

            $reportName = 'Originator o-ETR Report';
            $activeSheet = $objPHPExcel->getActiveSheet();
            $activeSheet->setTitle('Report'); // Change sheet's title if you want
            $activeSheet->getCell()->setValue($reportName)->getStyle()->getAlignment()->setWrapText(true);
            $activeSheet->getRowDimension()->setRowHeight();
            $cells = $activeSheet->getCellCollection();
            $lastRow = $activeSheet->getHighestRow();
            $lastColumn = $activeSheet->getHighestDataColumn();
            $firstColumn = 'A1:A' . $lastRow;
            $headerRange = 'A2:' . $lastColumn . '2';
            $row = $activeSheet->getRowIterator()->current();
            $cellIterator = $row->getCellIterator();
            $cellIterator->setIterateOnlyExistingCells(false);
            $columnArray = array();
            foreach ($cellIterator as $cell) {
                $columnArray[] = $cell->getColumn();
            }
            $range = current($cells) . ':' . end($cells);
            $headerStyle = array(
                'fill' => array(
                    'type' => PHPExcel_Style_Fill::FILL_SOLID,
                    'color' => array('rgb' => 'A9A9A9'),
                ),
                'font' => array('bold' => true)
            );
            $allStyle = array(
                'font' => array(
                    'name' => 'Verdana',
                    'size' => 8
                )
            );
            $boldStyle = array(
                'font' => array(
                    'bold' => true
                )
            );
            $borderStyle = array(
                'borders' => array(
                    'top' => array(
                        'style' => PHPExcel_Style_Border::BORDER_THIN
                    ),
                    'bottom' => array(
                        'style' => PHPExcel_Style_Border::BORDER_THIN
                    ),
                    'left' => array(
                        'style' => PHPExcel_Style_Border::BORDER_THIN
                    ),
                    'right' => array(
                        'style' => PHPExcel_Style_Border::BORDER_THIN
                    ),
                )
            );

            $activeSheet->getStyle($headerRange)->applyFromArray($headerStyle);
            $activeSheet->getStyle($range)->applyFromArray($allStyle);
            $activeSheet->getStyle($range)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
            $activeSheet->getStyle($firstColumn)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
            $activeSheet->getStyle($range)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $activeSheet->getStyle('A2:D' . $lastRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
            foreach ($columnArray as $col) {
                $activeSheet->getColumnDimension($col)->setAutoSize(true);
                for ($row = 2; $row <= $lastRow; $row++) {
                    $cell = $activeSheet->getCell($col . $row);
                    $cell->getStyle()->getAlignment()->setWrapText();
                }
            }
            $activeSheet->getColumnDimension('B')->setAutoSize()->setWidth(20);
            $sectionStyle = array(
                'fill' => array(
                    'type' => PHPExcel_Style_Fill::FILL_SOLID,
                    'color' => array('rgb' => 'A9A9A9'),
                ),
                'font' => array('bold' => true)
            );
            $headerStyle = array(
                'fill' => array(
                    'type' => PHPExcel_Style_Fill::FILL_SOLID,
                    'color' => array('rgb' => 'd9d9d9'),
                ),
                'font' => array('bold' => true)
            );
            $activeSheet->getStyle('A1:T'.$lastRow)->applyFromArray($allStyle);
            $activeSheet->getStyle($headerRange)->applyFromArray(array('fill' => array(
                'type' => PHPExcel_Style_Fill::FILL_NONE,

            ),));
            $activeSheet->getStyle('A1:' . $lastColumn . $lastRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_GENERAL);

            // header
            $activeSheet->getStyle('A2:' . $lastColumn . '3')->applyFromArray($boldStyle);
            $activeSheet->getStyle('B5')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
            $activeSheet->getStyle('B6:B7')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLXS);
            $activeSheet->getStyle('B8:B12')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
            for ($row = 5; $row <= 14; $row++) {
                $activeSheet->getCell('F' . $row)->setValue();
            }
            // o-ETR Amoun, o-ETR Balance,  Margin Amount, Deposit Amount, Received Deposit, Deposit Balance
            $activeSheet->getStyle('E5:E14')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
            // o-ETR Margin
            $activeSheet->getStyle('E8')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
            // Deposit %
            if (isset($_REQUEST['orpa_id'])) {
                $selectMarginHistory = "SELECT * FROM orpa_margin_change_history
                                WHERE orpa_id = ':orpa_id' ORDER BY id DESC LIMIT 2";
                $db = Bin_Db::connect();
                $marginResult = $db->query($selectMarginHistory, array(
                    ':orpa_id' => $_REQUEST['orpa_id'],
                ));
            }
            if (isset($marginResult) and $marginResult->getNumRows() === 2) {
                $activeSheet->getStyle('E11')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
            } else {
                $activeSheet->getStyle('E10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
            }
            $activeSheet->getStyle('A5:F14')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
            $activeSheet->getStyle('A5:A12')->applyFromArray($boldStyle);
            $activeSheet->getStyle('C5:C14')->applyFromArray($boldStyle);

            // blocks
            $headerValuesArray = array(
                'Deposits' => 'deposit',
                'c-ETR' => 'cetr',
                'd-ETR' => 'detr',
                'Purchase Orders' => 'po',
                'Available Payments' => 'payment',
                'Used Deposits' => 'used_payment',
            );
            $blocksArray = array();
            for ($row = 15; $row <= $lastRow; $row++) {
                $cell = $activeSheet->getCell('A' . $row);
                $cellValue = $cell->getValue();
                if (in_array($cellValue, array_keys($headerValuesArray))) {
                    $type = $headerValuesArray[$cellValue];
                    $blocksArray[$type]['row_start'] = $row + 2;
                } elseif (empty($cellValue) and isset($type) and empty($blocksArray[$type]['row_end'])) {
                    $blocksArray[$type]['row_end'] = $row - 1;
                } elseif ($row == $lastRow and isset($type) and empty($blocksArray[$type]['row_end'])) {
                    $blocksArray[$type]['row_end'] = $row;
                }
            }

            if (isset($blocksArray['deposit']) or isset($blocksArray['cetr']) or isset($blocksArray['detr']) OR isset($blocksArray['po'])) {
                foreach ($blocksArray as $key => $block) {
                    $rowStart = $block['row_start'];
                    $rowEnd = $block['row_end'];

                    $activeSheet->getStyle('A' . ($rowStart - 2))->applyFromArray($sectionStyle)->applyFromArray($borderStyle);

                    switch ($key) {
                        case 'used_payment':
                        case 'deposit':{
                            // Headers
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':G' . ($rowStart - 1))->applyFromArray($headerStyle)->applyFromArray($borderStyle);

                            // Border
                            $activeSheet->getStyle('A' . $rowStart . ':G' . $rowEnd)->applyFromArray($borderStyle);

                            // Id
                            $activeSheet->getStyle('A' . $rowStart . ':A' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
                            // Fx Rate
                            $activeSheet->getStyle('E' . $rowStart . ':E' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Amount
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // EUR Amount
                            $activeSheet->getStyle('F' . $rowStart . ':F' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('F' . $rowStart . ':F' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('G' . $rowStart . ':G' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Total
                            $postBlockRow = $rowEnd + 1;
                            $activeSheet->getStyle('E' . $postBlockRow . ':F' . $postBlockRow)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('E' . $postBlockRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('F' . $postBlockRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // Currency totals
                            $ctBlockStart = $rowEnd + 2;
                            $ctBlockEnd = $lastRow;
                            for ($tempRow = $ctBlockStart; $tempRow <= $lastRow; $tempRow++) {
                                $cell = $activeSheet->getCell('A' . $tempRow);
                                if ($cell->getValue()) {
                                    $ctBlockEnd = $tempRow - 2;
                                    break;
                                }
                            }
                            $activeSheet->getStyle('C' . $postBlockRow . ':F' . $ctBlockEnd)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('C' . $ctBlockStart . ':C' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':D' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':F' . $ctBlockEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            break;
                        }
                        case 'cetr':{
                            // Headers
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':T' . ($rowStart - 1))->applyFromArray($headerStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':T' . ($rowStart - 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Border
                            $activeSheet->getStyle('A' . $rowStart . ':T' . $rowEnd)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('A' . $rowStart . ':T' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

                            // Trade ID
                            $activeSheet->getStyle('A' . $rowStart . ':A' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
                            // Amount, Fx Rate, EUR Amount
                            $activeSheet->getStyle('D' . $rowStart . ':H' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('N' . $rowStart . ':P' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Amount
                            $activeSheet->getStyle('D' . $rowStart . ':E' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('F' . $rowStart . ':F' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
                            // EUR Amount
                            $activeSheet->getStyle('H' . $rowStart . ':H' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // Discount
                            $activeSheet->getStyle('I' . $rowStart . ':I' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
                            // SR
                            $activeSheet->getStyle('J' . $rowStart . ':J' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
                            // o\s Balance
                            $activeSheet->getStyle('Q' . $rowStart . ':Q' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('Q' . $rowStart . ':Q' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Status
                            $activeSheet->getStyle('R' . $rowStart . ':R' . $rowEnd)->applyFromArray($boldStyle);
                            // Paid
                            $activeSheet->mergeCells('K' . ($rowStart - 1) . ':L' . ($rowStart - 1));
                            $activeSheet->getStyle('K' . $rowStart . ':K' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('K' . $rowStart . ':K' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Commission
//                            $activeSheet->getStyle('Q' . $rowStart . ':Q' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // Creditor ID
                            $activeSheet->getStyle('S' . $rowStart . ':S' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
                            // Total
                            $postBlockRow = $rowEnd + 1;
                            $activeSheet->getStyle('G' . $postBlockRow . ':H' . $postBlockRow)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('G' . $postBlockRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('H' . $postBlockRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);

                            // Currency totals
                            $ctBlockStart = $rowEnd + 2;
                            $ctBlockEnd = (isset($blocksArray['detr'])) ? $blocksArray['detr']['row_start'] - 4 : $lastRow;
                            $activeSheet->getStyle('C' . $postBlockRow . ':S' . $ctBlockEnd)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('C' . $ctBlockStart . ':C' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':D' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':S' . $ctBlockEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);

                            break;
                        }
                        case 'detr':{
                            // Headers
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':T' . ($rowStart - 1))->applyFromArray($headerStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':T' . ($rowStart - 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Border
                            $activeSheet->getStyle('A' . $rowStart . ':T' . $rowEnd)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('A' . $rowStart . ':T' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

                            // Trade ID
                            $activeSheet->getStyle('A' . $rowStart . ':A' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
                            // Amount, Fx Rate, EUR Amount
                            $activeSheet->getStyle('D' . $rowStart . ':H' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('L' . $rowStart . ':N' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Amount
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // EUR Amount
                            $activeSheet->getStyle('F' . $rowStart . ':F' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // PP
                            $activeSheet->getStyle('G' . $rowStart . ':G' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
                            // SR
                            $activeSheet->getStyle('H' . $rowStart . ':H' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
                            // Purchased
                            $activeSheet->mergeCells('I' . ($rowStart - 1) . ':J' . ($rowStart - 1));
                            $activeSheet->getStyle('I' . $rowStart . ':I' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('I' . $rowStart . ':I' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // o\s Balance
                            $activeSheet->getStyle('O' . $rowStart . ':O' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('O' . $rowStart . ':O' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Paid
                            $activeSheet->mergeCells('I' . ($rowStart - 1) . ':J' . ($rowStart - 1));
                            $activeSheet->getStyle('I' . $rowStart . ':I' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            //Status
                            $activeSheet->getStyle('P' . $rowStart . ':P' . $rowEnd)->applyFromArray($boldStyle);
                            // EPR
                            $activeSheet->mergeCells('Q' . ($rowStart - 1) . ':R' . ($rowStart - 1));
                            $activeSheet->getStyle('Q' . $rowStart . ':Q' . $rowEnd)->applyFromArray($boldStyle);
                            $activeSheet->getStyle('R' . $rowStart . ':R' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('R' . $rowStart . ':R' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            // Creditor ID
                            $activeSheet->getStyle('S' . $rowStart . ':S' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
                            // Total
                            $postBlockRow = $rowEnd +1;
                            $activeSheet->getStyle('E' . $postBlockRow . ':F' . $postBlockRow)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('E' . $postBlockRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('F' . $postBlockRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);

                            // Currency totals
                            $ctBlockStart = $rowEnd + 2;
                            $ctBlockEnd = $lastRow;
                            $activeSheet->getStyle('C' . $postBlockRow . ':R' . $lastRow)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('C' . $ctBlockStart . ':C' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':D' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':R' . $ctBlockEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);

                            break;
                        }
                        case 'po':{
                            // Headers
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':J' . ($rowStart - 1))->applyFromArray($headerStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':J' . ($rowStart - 1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Border
                            $activeSheet->getStyle('A' . $rowStart . ':J' . $rowEnd)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('A' . $rowStart . ':J' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                             
                            // Po No.
                            $activeSheet->getStyle('A' . $rowStart . ':A' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // PO Date
                            $activeSheet->getStyle('B' . $rowStart . ':B' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Ccy
                            $activeSheet->getStyle('C' . $rowStart . ':C' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Amount
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // Amount EUR
                            $activeSheet->getStyle('F' . $rowStart . ':F' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('F' . $rowStart . ':F' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // Debtor Name
                            $activeSheet->getStyle('H' . $rowStart . ':H' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // Debtor ID
                            $activeSheet->getStyle('G' . $rowStart . ':G' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
                            $activeSheet->getStyle('G' . $rowStart . ':G' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            // CS Limit
                            $activeSheet->getStyle('I' . $rowStart . ':I' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('J' . $rowStart . ':J' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('J' . $rowStart . ':J' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            // Total
                            
                            $postBlockRow = $rowEnd +1;
                            $activeSheet->getStyle('E' . $postBlockRow . ':F' . $postBlockRow)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('E' . $postBlockRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('F' . $postBlockRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);

                            // Currency totals
                            $ctBlockStart = $rowEnd + 2;
                            $ctBlockEnd = $lastRow;
                            for ($tempRow = $ctBlockStart; $tempRow <= $lastRow; $tempRow++) {
                                $cell = $activeSheet->getCell('A' . $tempRow);
                                if ($cell->getValue()) {
                                    $ctBlockEnd = $tempRow - 2;
                                    break;
                                }
                            }
                            $activeSheet->getStyle('C' . $postBlockRow . ':J' . $ctBlockEnd)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                            $activeSheet->getStyle('C' . $ctBlockStart . ':C' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':D' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                            $activeSheet->getStyle('D' . $ctBlockStart . ':J' . $ctBlockEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            
                            break;
                        }
                        case 'payment': {
                            // Headers
                            $activeSheet->getStyle('A' . ($rowStart - 1) . ':D' . ($rowStart - 1))->applyFromArray($headerStyle)->applyFromArray($borderStyle);

                            // Border
                            $activeSheet->getStyle('A' . $rowStart . ':D' . $rowEnd)->applyFromArray($borderStyle);

                            // Type
                            $activeSheet->getStyle('A' . $rowStart . ':A' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);

                            // Amount
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);
                            $activeSheet->getStyle('D' . $rowStart . ':D' . $rowEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
							// Currency totals
                                $ctBlockStart = $rowEnd + 1;
                                $ctBlockEnd = $lastRow;
                                for ($tempRow = $ctBlockStart; $tempRow <= $lastRow; $tempRow++) {
                                    $cell = $activeSheet->getCell('A' . $tempRow);
                                    if ($cell->getValue()) {
                                        $ctBlockEnd = $tempRow - 2;
                                        break;
                                    }
                                }
                                $activeSheet->getStyle('C' . $ctBlockStart . ':D' . $ctBlockEnd)->applyFromArray($boldStyle)->applyFromArray($borderStyle);
                                $activeSheet->getStyle('C' . $ctBlockStart . ':C' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
                                $activeSheet->getStyle('D' . $ctBlockStart . ':D' . $ctBlockEnd)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                                $activeSheet->getStyle('D' . $ctBlockStart . ':D' . $ctBlockEnd)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2);								
                            break;
                        }
                    }
                }
            }
            $activeSheet->mergeCells('A1:C1');
            $activeSheet->calculateColumnWidths();
            foreach ($columnArray as $col) {
                $width = $activeSheet->getColumnDimension($col)->getWidth();
                if (!in_array($col, array('B'))) {
                    $activeSheet->getColumnDimension($col)->setAutoSize()->setWidth(1.18 * $width);
                    if ($col === 'G' and $width > 50) {
                        $activeSheet->getColumnDimension($col)->setAutoSize()->setWidth(50);
                    }
                } elseif ($col == 'B') {
                    $activeSheet->getColumnDimension($col)->setAutoSize()->setWidth(1.3 * $width);
                }
            }

            unlink($tmpfile); // delete temporary file because it isn't needed anymore

            // Creates a writer to output the $objPHPExcel's content
            $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
            $writer->save('php://output');
            exit;

        }
        else
        {
            Bin_Template::CreateTemplate('orpa_report.html', array(
                'report' => $model->getReportData($orpaId, $_SESSION['user']['userid']),
                'dataTables' => true,
            ));
        }

    }

    public function oetrList()
    {
        include_once('classes/Model/MDebtor.php');
        $request = Bin_Request::getInstance();
        $search = $request->query('search');
        $credebtor = $request->query('credebtor');
        $trade = new Model_MUserOrpa();
        $output = array(
            'do' => $request->query('do'),
            'orpa_list' => $trade->getOrpaList($search, $credebtor),
            'credebtors' => Model_MDebtor::getAllDebtorByUserId($_SESSION['user']['userid']),
            'search' => $search,
            'credebtorId' => $credebtor,
        );
        Bin_Template::createTemplate('orpa_list.html', $output);
    }

    public function rejectedOetrList()
    {
        $trade = new Model_MUserOrpa();
        $output = array(
            'orpa_list' => $trade->getOrpaByUserId($_SESSION['user']['userid'], $trade::STATUS_REJECTED),
        );
        Bin_Template::createTemplate('orpa_list.html', $output);
    }

    public function deleteOetrPo()
    {
        $orpaPoId = isset($_REQUEST['orpa_po_id']) ? (int)$_REQUEST['orpa_po_id'] : null;
        $originatorId = $_SESSION['user']['userid'];

        $trade = new Model_MUserOrpa();
        $checkOetrPo = $trade->checkOrpaPo($orpaPoId, $originatorId);
        if (!$checkOetrPo) exit();

        $trade->deleteOrpaPo($orpaPoId);
    }

    public function uploadRevolvingOetr()
    {
        include_once('classes/Model/MTrade.php');

        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];
        $trade = new Model_MUserOrpa();

        $checkOetr = $orpaId ? $trade->checkOrpa($orpaId, $originatorId) : true;
        if ($checkOetr === false) {
            header("Location:?do=oetr_list");
        }

        $orpaArray = array();
        $orpaList = $trade->getOrpaByUserId($_SESSION['user']['userid'], $trade::STATUS_CREATED);
        foreach ($orpaList as $orpa){
            $orpaArray[$orpa['id']]=($orpa['friendly_name'])?($orpa['friendly_name'] . ' (' . $orpa['reference'].')'):($orpa['reference'] . ' (' . $orpa['expected_date'].')');
        }

        $help = Model_MTrade::getHelpLinks(27);
        $debtor = Model_MTrade::getDebtor('debtor');
        for ($i = 0; $i < count($debtor); $i++) {
            if ($debtor[$i]['trade_name'] != '' && $debtor[$i]['debtor_name'] == '') {
                $split_trade = $debtor[$i]['trade_name'];
                $debtor[$i]['debtor_name'] = $split_trade;
            } elseif ($debtor[$i]['trade_name'] != '' && $debtor[$i]['debtor_name'] != '') {
                $debtor[$i]['debtor_name'] = substr($debtor[$i]['trade_name'], 0, 14) . ' - ' . substr($debtor[$i]['debtor_name'], 0, 12);
            } else {
                $debtor[$i]['debtor_name'] = $debtor[$i]['debtor_name'];
            }
        }

        $output = array(
            'help' => $help,
            'debtor' => $debtor,
            'orpa_id' => $orpaId,
            'orpa_list' => $orpaArray,
        );
        Bin_Template::createTemplate('upload_revolving_orpa.html', $output);
    }

    public function saveRevolvingOetr()
    {
        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $debtorId = (isset($_REQUEST['debtor_id'])) ? (int)$_REQUEST['debtor_id'] : null;
        $currencyId = (isset($_REQUEST['currency_id'])) ? (int)$_REQUEST['currency_id'] : null;
        $amount = (isset($_REQUEST['amount'])) ? (int)$_REQUEST['amount'] : null;
        $poNumber = (isset($_REQUEST['po'])) ? $_REQUEST['po'] : null;
        $poDate = $_REQUEST['po_year'] . '-' . $_REQUEST['po_month'] . '-' . $_REQUEST['po_date'];
        $files = (isset($_FILES['file_po']) and is_array($_FILES['file_po'])) ? $_FILES['file_po'] : array();
        $saveType = isset($_POST['save_type']) ? $_POST['save_type'] : null;
        $originatorId = $_SESSION['user']['userid'];
        
        
        
        
        $trade = new Model_MUserOrpa();
        $checkOetr = $trade->checkOrpa($orpaId, $originatorId);
        $checkDebtor = $trade->checkDebtor($debtorId, $originatorId);
        if (!$checkOetr || !$checkDebtor) {
            header("Location:?do=originatorhome");
        }

        $data = array(
            'id' => null,
            'orpa_id' => $orpaId,
            'debtor_id' => $debtorId,
        );
        $filesData = array(
            array(
                'amount' => $amount,
                'po' => $poNumber,
                'po_date' => $poDate,
                'file_po' => array(
                    'name' => $files['name'],
                    'tmp_name' => $files['tmp_name'],
                )
            ),
        );

        $trade->savePoFiles($data, $filesData);

        if ($saveType === 'finish') {
            $trade->submit($orpaId);
            header("Location:?do=oetr_list");
        } else {
            header("Location:?do=upload_revolving_oetr&orpa_id=" . $orpaId);
        }
    }

    public function saveOetrPo()
    {
        return;
    }

    public function uploadOetrFileSupport()
    {
		$file = Bin_Array::get($_FILES, 'file');
        if (!$file) {
            return false;
        }

        require_once ROOT_FOLDER . 'classes/Storage.php';

        $namePrefix = $_SESSION['org_id'] . "_" . $_SESSION['user']['userid'];
        $dirPath = "/documents/org/" . $namePrefix;
        $storage = Storage_Repository::get(Storage_Repository::ORG_DOCS);
        


        $fileName = $namePrefix . "_ORPA_SUPPORT_" . time() . "." . pathinfo($file["name"], PATHINFO_EXTENSION);
        $filePath = $dirPath . "/" . $fileName;
        $storage->setFromUpload($filePath, $file);

        $_SESSION['orpa_file_support'] = $filePath;

        return true;
    }

    public function getOrpaForCetr()
    {
        $request = Bin_Request::getInstance();

        if ($request->isAjax()) {
            $originator_id = isset($_SESSION['user']['userid']) ? $_SESSION['user']['userid'] : null;
            $orpaModel = new Model_MUserOrpa();
            $orpaList = $orpaModel->getOrpaForCEtr($originator_id);
            $result = json_encode($orpaList);
            exit($result);
        }
    }

    public function getOrpaForDetr()
    {
        $request = Bin_Request::getInstance();

        if ($request->isAjax()) {
            $debtor_id = isset($_POST['debtor_id']) ? (int)$_POST['debtor_id'] : null;
            $orpaModel = new Model_MUserOrpa();
            $orpaList = $orpaModel->getOrpaForDEtr($debtor_id);
            $result = json_encode($orpaList);
            exit($result);
        }
    }

    public function submitOetr()
    {
        $orpaId = isset($_REQUEST['orpa_id']) ? (int)$_REQUEST['orpa_id'] : null;
        $originatorId = $_SESSION['user']['userid'];

        $trade = new Model_MUserOrpa();
        $checkOetr = $trade->checkOrpa($orpaId, $originatorId);
        if (!$checkOetr) {
            header("Location:?do=originatorhome");
        }

        $trade->submit($orpaId);

        header("Location:?do=oetr_list");
    }

    public function getPoForDetr()
    {
        $request = Bin_Request::getInstance();

        if ($request->isAjax()) {
            $debtor_id = $request->post('debtor_id');
            $orpa_id = $request->post('orpa_id');
            if ($debtor_id and Model_MUserOrpa::isUserOrpa($_SESSION['user']['userid'], $orpa_id)) {
                $orpaModel = new Model_MUserOrpa();
                $poList = $orpaModel->getPoByOrpaId($orpa_id, $debtor_id);
                $poList = array_map(function ($el) {
                    return array(
                        'id' => $el['id'],
                        'po_no' => $el['po_no'],
                        'available_amount' => sprintf("%01.2f",$el['amount'] - $el['traded_amount']),
                        'currency_code' => $el['currency_code']
                    );
                }, $poList);
                echo json_encode($poList);
            }
        }
        exit();
    }

    public function getEarlyPaymentForOrpa()
    {
        include_once(ROOT_FOLDER . 'admin/classes/Model/MOrpa.php');

        $orpaId = $_REQUEST['orpa_id'];
        $orpaModel = new Model_MUserOrpa();
        echo $orpaModel->getEarlyPaymentForOrpa($orpaId);
    }

    public function reconcileOrpa()
    {
        Bin_Config::requireAdminModel('MCEtrReconciliation');
        Bin_Config::requireAdminModel('MOrpa');
        $orpaModel = new Model_MOrpa();
        $request = Bin_Request::getInstance();
        $orpaId = (int)$request->query('id');
        $originatorId = $_SESSION['user']['userid'];
        $step = $request->query('step');
        $payments = $request->post('payments');
        $invoices = $request->post('invoices');

        if (empty($orpaId) or empty($originatorId) or !$orpaModel->isOriginatorsOrpa($orpaId, $originatorId)) {
            return;
        }

        if ($step == 2 or $step==3) {
            $paymentsDTOArray = Model_MCEtrReconciliation::fetchPaymentsAsDTO($payments);
            $invoicesDTOArray = Model_MCEtrReconciliation::fetchInvoicesAsDTO($invoices);
            $rec = new Model_MCEtrReconciliation($paymentsDTOArray,$invoicesDTOArray);
            if($step == 2){
                Bin_Template::CreateTemplate('orpa/reconcileorpa_step2.html', array(
                    'selectedPayments' => $payments,
                    'selectedInvoices' => $invoices,
                    'instructions' => $rec->makeInstructions()
                ));
            }else{
                $rec->makeReconcile();
                echo "<script>window.opener.location.reload(); window.close()</script>";
            }

        } else {
            Bin_Template::CreateTemplate('orpa/reconcileorpa.html', array(
                'payments' => Model_MOrpa::getPayments($orpaId, $originatorId),
                'invoices' => Model_MOrpa::getUnreconciledInvoices($orpaId),
            ));
        }
    }

    public function reconcileOrpaStatement()
    {
        Bin_Config::requireAdminModel('MOrpa');
        $request = Bin_Request::getInstance();
        $orpaId = (int)$request->query('id');
        $originatorId = (int)$request->query('originator_id');
        $orpaModel = new Model_MOrpa();
        if (!$orpaModel->isOriginatorsOrpa($orpaId, $originatorId)) {
            return;
        }

        Bin_Template::CreateTemplate('orpa/orpa_reconciliation_statement.html', array(
            'invoices' => $orpaModel->getReconciledInvoices($orpaId),
        ));
    }

    public function marginReduction()
    {
        Bin_Config::requireAdminModel('MOrpa');
        $request = Bin_Request::getInstance();
        $orpaModel = new Model_MOrpa();
        $orpaId = (int)$request->query('id');

        Bin_Template::CreateTemplate('orpa/orpa_margin_reduction.html', array(
            'margin_reduction_history' => $orpaModel->getOrpaMarginHistory($orpaId),
        ));
    }

    public function depositReduction()
    {
        Bin_Config::requireAdminModel('MOrpa');
        $request = Bin_Request::getInstance();
        $orpaModel = new Model_MOrpa();
        $orpaId = (int)$request->query('id');

        Bin_Template::CreateTemplate('orpa/orpa_deposit_reduction.html', array(
            'deposit_reduction_history' => $orpaModel->getOrpaDepositHistory($orpaId),
        ));
    }

    public function oetrHistory()
    {
        Bin_Config::requireAdminModel('MOrpa');
        $request = Bin_Request::getInstance();
        $orpaModel = new Model_MOrpa();
        $orpaId = (int)$request->query('id');

        Bin_Template::CreateTemplate('orpa/oetr_history.html', array(
            'amount_history' => $orpaModel->getAmountHistory($orpaId),
        ));
    }
}