Merge branches 'development' and 'dillon/accounting-bank-mapping' of gitlab.com:CIEFWorldwideSdnBhd/exchange-2.0 into development

This commit is contained in:
edmondlang
2023-07-07 01:19:32 +08:00
7 changed files with 215 additions and 3 deletions
@@ -59,7 +59,7 @@ class UpdateBankStatementDetailLogic extends AbstractControllerLogic
$salesSystems = ['lite', 'cntr', 'probashi', 'pets'];
$allowedSystems = array_merge($salesSystems, ['exchange', 'izyim']);
if (!in_array($systemReference, $allowedSystems)) {
if (!in_array($systemReference, $allowedSystems) && !in_array($request->input('pay_for'), ['internal_bank_transfer', 'others'])) {
throw new MalformedRequestException('System Reference not allowed');
}
@@ -0,0 +1,38 @@
<?php
namespace App\Classes\Modules\Accounting\Processors;
use App\Classes\Exceptions\MalformedRequestException;
use App\Models\Transaction;
use Illuminate\Support\Facades\Log;
use \Illuminate\Database\Eloquent\Collection;
class ListShippingPortalTransactions
{
public function execute($filters)
{
try {
$url = 'https://izyim.cief-malaysia.com/public/api/v1/transactions/query';
$client = new \GuzzleHttp\Client(['verify' => false]);
$response = $client->request('GET', $url . '?api-key=510acd13d8d24375cf038ad626c282565451461a9c2399357e0b65365300787e&filters=' . json_encode($filters));
$body = $response->getBody();
$data = json_decode($body, true);
$payload = $data['payload'];
return $data['payload']['data'];
// return $payload['data'];
// $return_data = Collection::hydrate($payload['data']);
// return $return_data;
} catch (\Exception $exception) {
dd($exception->getMessage());
// preg_match('/\{.*\}/s', $exception->getMessage(), $matches);
// $jsonError = json_decode($matches[0]);
// Retrieved Transactions failed
// throw new MalformedRequestException($jsonError->title);
}
// if not found
throw new MalformedRequestException('Bill Number Not Found.');
}
}
@@ -0,0 +1,123 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\StatementTransactionOwnerType;
use App\Models\StatementTransactionOwner;
use App\Models\Transaction;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Classes\Modules\Accounting\Processors\ListShippingPortalTransactions;
use App\Classes\ValueObjects\Constants\ShippingTransactionType;
use App\Classes\ValueObjects\Constants\TransactionType;
class ExportsInvoiceTransactions implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function headings(): array
{
return [
'DocNo',
'DocDate',
'DebtorCode',
'Ref',
'DebtorName',
'CurrencyCode',
'ShipInfo',
'ItemCode',
'DetailDescription',
'FurtherDescription',
'Qty',
'UnitPrice',
'AccNo',
'DeptNo'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
$query = StatementTransactionOwner::whereNull('invoice_reference')
->whereIn('type', [StatementTransactionOwnerType::SALES, StatementTransactionOwnerType::WALLET_TOP_UP])
->whereIn('status', [ApprovalStatus::COMPLETED, ApprovalStatus::APPROVED]);
return $query;
}
/**
* @param Transaction $transaction
*
* @return array
*/
public function map($transaction): array
{
$row = null;
if($transaction->system == 'EXCHANGE') {
$row = (App()->make($transaction->owner_type))->where('id', $transaction->owner_id)->first();
$company = $row->type === TransactionType::PAYMENT ? $row->owner->company : $row->owner->owner;
$booking = $row->owner;
return [
'<<New>>',
$row->updated_at->format('m/d/Y H:m'),
$company->debtor,
$row->type === TransactionType::PAYMENT ? $booking->marking : $company->reference,
'',
'MYR',
$row->type === TransactionType::PAYMENT ? $booking->marking : $row->bill_no,
$row->type === TransactionType::PAYMENT ? '' : 'W1',
$row->type === TransactionType::PAYMENT ? 'PLEASE REFER TO THE ATTACHED APPENDIX REF ' . $booking->marking : 'CREDIT SALES',
'',
1,
round($row->amount, 2),
'500-0000',
'CIEF'
];
}
else {
$row = (App()->make(ListShippingPortalTransactions::class))->execute([
'id' => $transaction->owner_id,
'with_company' => true,
])[0];
$order = $row['order'];
$company_module = $order['company_module'];
return [
'<<New>>',
$row['updated_at'],
$company_module['debtor'],
$row['type'] === ShippingTransactionType::PAYMENT ? $order['reference'] : $company_module['marking'],
'',
'MYR',
$row['type'] === ShippingTransactionType::PAYMENT ? $order['reference'] : $row['bill_no'],
$row['type'] === ShippingTransactionType::PAYMENT ? '' : 'W1',
$row['type'] === ShippingTransactionType::PAYMENT ? 'PLEASE REFER TO THE ATTACHED APPENDIX REF `' . $order['reference'] : 'CREDIT SALES',
'',
1,
round($row['amount'], 2),
'500-0000',
'CIEF'
];
}
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class ShippingTransactionType
{
// public const PAYMENT_ATTEMPT = 0;
public const SHIPPING_INVOICE = 1;
public const PAYMENT = 2;
// public const BILL = 3;
// public const PERFORMA = 4;
public const TOP_UP = 5;
// public const REFUND = 6;
// public const PURCHASE_ORDER = 7;
// public const SUPPLIER_DELIVER = 8;
public const CREDIT_NOTE = 9;
public const WITHDRAW = 10;
public const DEBIT_NOTE = 11;
public const TRANSFER_FEE = 12;
public const CASH_BACK = 13;
// public const SHIPPING_COST = 14;
public const GROUP_PAYMENT = 15;
}
@@ -9,8 +9,8 @@ use App\Classes\Modules\Exports\Services\ExportsBookingTransactions;
use App\Classes\Modules\Exports\Services\ExportsLeadsTransactions;
use App\Classes\Modules\Exports\Services\ExportsNullDebtors;
use App\Classes\Modules\Exports\Services\ExportsPaymentTransactions;
use App\Classes\Modules\Exports\Services\ExportsWalletTransactions;
use App\Classes\Modules\Exports\Services\ExportsInvoiceTransactions;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -57,6 +57,13 @@ class ExportCustomersToExcelController
return $response;
}
public function invoiceTransactions(Request $request){
$exportsTransactions = new ExportsInvoiceTransactions($request);
$response = $exportsTransactions->download('invoice-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
public function bookingTransactions(ExportsBookingTransactions $exportsBookingTransactions, Request $request){
$response = $exportsBookingTransactions->download('bookingTransactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();