Skip to content

Instantly share code, notes, and snippets.

@agengdp
Created August 4, 2021 10:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agengdp/afc716705c933af214e4fcaaa5d95b84 to your computer and use it in GitHub Desktop.
Save agengdp/afc716705c933af214e4fcaaa5d95b84 to your computer and use it in GitHub Desktop.
txt post
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use App\Events\InvoiceApprovalPosted;
use Carbon\Carbon;
use App\Models\Matdoc;
use Illuminate\Support\Facades\DB;
class GenerateTxtInvoicePosted
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param InvoiceApprovalPosted $event
* @return void
*/
public function handle(InvoiceApprovalPosted $event)
{
$invoice = $event->invoice;
if($invoice->ivtype !== 'PO'){
$this->npo($invoice);
}else{
$this->po($invoice);
}
}
/**
* Create PO txt
* @param \App\Models\Invoice\Invoice $invoice
* @return void
*/
private function po($invoice){
$rootFolder = DB::table('vim_ftp_dir')->where('transtype', 'INVOICE')->first();
$file = fopen($rootFolder->directory.'/POST_PO_' . Carbon::now()->format('YmdHis') .'.txt', "w") or die("Unable to open file!");
$txts = DB::table('vim_invoices')
->join('vim_invoice_items', 'vim_invoices.id', '=', 'vim_invoice_items.invid')
->leftJoin('vim_invoice_adjustments', 'vim_invoices.id', '=', 'vim_invoice_adjustments.invoice_id')
->where('vim_invoices.id', $invoice->id)
->selectRaw('
vim_invoices.vendor,
vim_invoices.id,
vim_invoices.cocode,
vim_invoices.ivdate,
vim_invoices.ivposdate,
vim_invoices.busarea,
vim_invoices.taxinvoice,
vim_invoices.sgtxt,
vim_invoices.taxcode,
(vim_invoices.amount + vim_invoices.witholdingtax_amount) as amount,
vim_invoices.currency,
vim_invoices.ivbsdate,
vim_invoices.zterm,
vim_invoices.payment_block,
vim_invoices.ivnum,
vim_invoices.buktxt,
vim_invoices.sapdoc,
vim_invoice_items.ebeln,
vim_invoice_items.ebelp,
vim_invoice_items.mblnr,
vim_invoice_items.mjahr,
vim_invoice_items.zeile,
vim_invoice_items.netpr,
vim_invoice_items.menge,
vim_invoice_items.meins,
vim_invoices.witholdingtax,
vim_invoices.witholdingtax_code,
vim_invoices.witholdingtax_base_fc,
vim_invoice_adjustments.gl_account,
vim_invoice_adjustments.amount as adj_amount,
vim_invoice_adjustments.taxcode as txcode,
vim_invoice_adjustments.text,
vim_invoice_adjustments.cost_center
')
->get();
foreach($txts as $txt){
$txt = (array) $txt;
$txt['ivdate'] = Carbon::createFromFormat('Y-m-d', $invoice['ivdate'])->format('Ymd');
$txt['ivposdate'] = Carbon::createFromFormat('Y-m-d', $invoice['ivposdate'])->format('Ymd');
$txt['ivbsdate'] = Carbon::createFromFormat('Y-m-d', $invoice['ivbsdate'])->format('Ymd');
$content = implode("\t", array_values($txt)) . "\n";
fwrite($file, $content);
}
fclose($file);
}
/**
* Create non PO txt
* @param \App\Models\Invoice\Invoice $invoice
* @return void
*/
private function npo($invoice){
$rootFolder = DB::table('vim_ftp_dir')->where('transtype', 'INVOICE')->first();
$file = fopen($rootFolder->directory.'/POST_NPO_' . Carbon::now()->format('YmdHis') .'.txt', "w") or die("Unable to open file!");
$txts = DB::table('vim_invoices')
->leftJoin('vim_invoice_materials', 'vim_invoices.id', '=', 'vim_invoice_materials.invoice_id')
->where('vim_invoices.id', $invoice->id)
->selectRaw('
vim_invoices.id,
vim_invoices.vendor,
vim_invoices.cocode,
vim_invoices.ivdate,
vim_invoices.ivposdate,
vim_invoices.busarea,
vim_invoices.taxinvoice,
vim_invoices.sgtxt,
vim_invoices.taxcode,
(vim_invoices.amount + vim_invoices.witholdingtax_amount) as amount,
vim_invoices.currency,
vim_invoices.ivbsdate,
vim_invoices.zterm,
vim_invoices.payment_block,
vim_invoices.ivnum,
vim_invoices.buktxt,
vim_invoices.witholdingtax,
vim_invoices.witholdingtax_code,
vim_invoices.witholdingtax_base_fc,
vim_invoice_materials.gl_account,
vim_invoice_materials.amount as mat_amount,
vim_invoice_materials.taxcode as txcode,
vim_invoice_materials.text,
vim_invoice_materials.cost_center,
vim_invoices.sapdoc
')
->get();
foreach($txts as $txt){
$txt = (array) $txt;
// Yg dikirim ke SAP adalah, amount tanpa pengurangan wht
// $txt['amount'] = $txt['amount'] + $txt['witholdingtax_amount'];
$txt['ivdate'] = Carbon::createFromFormat('Y-m-d', $invoice['ivdate'])->format('Ymd');
$txt['ivposdate'] = Carbon::createFromFormat('Y-m-d', $invoice['ivposdate'])->format('Ymd');
$txt['ivbsdate'] = Carbon::createFromFormat('Y-m-d', $invoice['ivbsdate'])->format('Ymd');
$txt['mat_amount'] = $txt['mat_amount'] + ($txt['mat_amount'] * taxTranslator($txt['txcode']) / 100);
$content = implode("\t", array_values($txt)) . "\n";
fwrite($file, $content);
}
fclose($file);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment