<?php

namespace App\Tally;

use Illuminate\Http\Request;

class ProcessingFee{

    private $voucher;
    private $request;

    public function __construct(Request $request){
        $this->request = $request;
        $this->voucher = $this->request->get('voucher');
    }

    public function getBankEntry(){
        return $this->setBankEntryXML();
    }

    public function setBankEntryXML(){
        return '<ENVELOPE>
	<HEADER>
		<TALLYREQUEST>Import Data</TALLYREQUEST>
	</HEADER>
	<BODY>
		<IMPORTDATA>
			<REQUESTDESC>
				<REPORTNAME>Vouchers</REPORTNAME>
				<STATICVARIABLES>
					<SVCURRENTCOMPANY>'.TallyListener::$companyName.'</SVCURRENTCOMPANY>
				</STATICVARIABLES>
			</REQUESTDESC>
			<REQUESTDATA>
				<TALLYMESSAGE>
					<VOUCHER>
						<DATE>'.$this->voucher->date.'</DATE>
						<NARRATION>'.str_replace('&','',$this->voucher->narration).'</NARRATION>
						<VOUCHERTYPENAME>Journal</VOUCHERTYPENAME>
						<VOUCHERNUMBER>'.$this->voucher->id.'-'.time().'</VOUCHERNUMBER>
						<PERSISTEDVIEW>Accounting Voucher View</PERSISTEDVIEW>
						<EFFECTIVEDATE>'.$this->voucher->date.'</EFFECTIVEDATE>
						'.$this->getCreditors().'
						'.$this->getDebtors().'
					</VOUCHER>
				</TALLYMESSAGE>
			</REQUESTDATA>
		</IMPORTDATA>
	</BODY>
</ENVELOPE>';
    }

    /**
     * @return mixed
     */
    public function getCustomerName(){

        return str_replace('&','',$this->voucher->name);
    }

    public function getUniqueNameString(){
        return $this->getCustomerName().'-'.$this->voucher->ledger_id;
    }

    public function getDebtors(){
        $debtors = '';
        foreach ($this->request->get('processing_fee') as $payment) {
            if($payment->sundry == 'DR') {
                $debtors .= '<ALLLEDGERENTRIES.LIST>
							<LEDGERNAME>' . str_replace('&','',$payment->ledgerName) . '</LEDGERNAME>
							<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
							<ISPARTYLEDGER>No</ISPARTYLEDGER>
							<ISLASTDEEMEDPOSITIVE>Yes</ISLASTDEEMEDPOSITIVE>
							<AMOUNT>-' . $payment->amount . '</AMOUNT>
							<BILLALLOCATIONS.LIST>
								<NAME>' . ($payment->voucher ? $payment->voucher->id : $this->voucher->id) . '</NAME>
								<BILLTYPE>New Ref</BILLTYPE>
								<AMOUNT>-' . $payment->amount . '</AMOUNT>
							</BILLALLOCATIONS.LIST>
						</ALLLEDGERENTRIES.LIST>';
            }
        }

        return $debtors;
    }

    public function getCreditors(){
        $creditors = '';
        foreach ($this->request->get('processing_fee') as $payment) {
            if($payment->sundry == 'CR') {
                $creditors .= '<ALLLEDGERENTRIES.LIST>
							<LEDGERNAME>' . str_replace('&','',$payment->ledgerName) . '</LEDGERNAME>
							<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
							<ISPARTYLEDGER>Yes</ISPARTYLEDGER>
							<ISLASTDEEMEDPOSITIVE>No</ISLASTDEEMEDPOSITIVE>
							<AMOUNT>' . $payment->amount . '</AMOUNT>
							<BILLALLOCATIONS.LIST>
								<NAME>'.$this->voucher->id.'-1'.'</NAME>
								<BILLTYPE>Agst Ref</BILLTYPE>
								<AMOUNT>' . $payment->amount . '</AMOUNT>
							</BILLALLOCATIONS.LIST>
						</ALLLEDGERENTRIES.LIST>';
            }
        }

        return $creditors;
    }

    public function billList($bills){
        $billList = '';
        foreach ($bills as $bill){
            $billList .= '<BANKALLOCATIONS.LIST>
								<DATE>20190401</DATE>
								<INSTRUMENTDATE>' . $bill->INSTRUMENTDATE . '</INSTRUMENTDATE>
								<NAME>'.$this->getUniqueNameString().'-'.$bill->id.'</NAME> <!-- Unique Name for each call -->
								<TRANSACTIONTYPE>' . $bill->TRANSACTIONTYPE . '</TRANSACTIONTYPE> 
								<BANKNAME>'.$bill->BANKNAME.'</BANKNAME> 
								<PAYMENTFAVOURING>'.$this->getUniqueNameString().'</PAYMENTFAVOURING>
								<INSTRUMENTNUMBER>'.$bill->INSTRUMENTNUMBER.'</INSTRUMENTNUMBER> <!-- Cheque Number -->
								<PAYMENTMODE>' . $bill->PAYMENTMODE . '</PAYMENTMODE>
								<AMOUNT>-' . $bill->amount . '</AMOUNT>
							</BANKALLOCATIONS.LIST>';
        }

        return $billList;
    }
}
