<?php

namespace App\Tally;

use Illuminate\Http\Request;

class Payment{

    private $voucher;
    private $request;

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

    public function getPaymentEntry(){
        return $this->setPaymentEntryXML();
    }

    public function setPaymentEntryXML(){
        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>Payment</VOUCHERTYPENAME>
						<VOUCHERNUMBER>'.$this->voucher->id.'-'.time().'</VOUCHERNUMBER>
						<PERSISTEDVIEW>Accounting Voucher View</PERSISTEDVIEW>
						<EFFECTIVEDATE>'.$this->voucher->date.'</EFFECTIVEDATE>
						'.$this->getDebtors().'
						'.$this->getCreditors().'
					</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('bank') as $payment) {
            if($payment->sundry == 'CR') {
                $debtors .= '<ALLLEDGERENTRIES.LIST>
							<LEDGERNAME>' . $this->getUniqueNameString() . '</LEDGERNAME>
							<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
							<ISPARTYLEDGER>Yes</ISPARTYLEDGER>
							<ISLASTDEEMEDPOSITIVE>Yes</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 $debtors;
    }

    public function getCreditors(){
        $creditors = '';
        foreach ($this->request->get('bank') as $payment) {
            if($payment->sundry == 'DR') {
                $creditors .= '<ALLLEDGERENTRIES.LIST>
							<LEDGERNAME>'.str_replace('&','',$payment->ledgerName).'</LEDGERNAME>
							<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
							<ISPARTYLEDGER>Yes</ISPARTYLEDGER>
							<ISLASTDEEMEDPOSITIVE>No</ISLASTDEEMEDPOSITIVE>
							<AMOUNT>' . $payment->amount . '</AMOUNT>
							'.$this->BillList($payment->summary).'
						</ALLLEDGERENTRIES.LIST>';
            }
        }

        return $creditors;
    }
    public function billList($bills){
        $billList = '';
        foreach ($bills as $bill){
            $billList .= '<BANKALLOCATIONS.LIST>
								<DATE>'.$this->voucher->date.'</DATE>
								<INSTRUMENTDATE>' . $bill->INSTRUMENTDATE . '</INSTRUMENTDATE>
								<NAME>'.$this->getUniqueNameString().'-'.$bill->id.'</NAME><!-- Unique Name for each call -->
								<EMAIL>info@getmyerp.com</EMAIL> <!-- Customer\'s Email Address -->
								<TRANSACTIONTYPE>' . $bill->TRANSACTIONTYPE . '</TRANSACTIONTYPE>
								<IFSCODE>123</IFSCODE>
								<BANKNAME>'.$bill->BANKNAME.'</BANKNAME>
								<ACCOUNTNUMBER>12456</ACCOUNTNUMBER>
								<PAYMENTFAVOURING>'.$this->getUniqueNameString().'</PAYMENTFAVOURING>
								<TRANSFERMODE>NEFT</TRANSFERMODE>
								<INSTRUMENTNUMBER>'.$bill->INSTRUMENTNUMBER.'</INSTRUMENTNUMBER>
								<PAYMENTMODE>' . $bill->PAYMENTMODE . '</PAYMENTMODE>
								<BANKPARTYNAME>'.$this->getUniqueNameString().'</BANKPARTYNAME>
								<AMOUNT>' . $bill->amount . '</AMOUNT>
							</BANKALLOCATIONS.LIST>';
        }

        return $billList;
    }
}
