Merge remote-tracking branch 'origin/dillon/accounting-bank-mapping' into dillon/accounting-bank-mapping

This commit is contained in:
Omair Saleh
2023-06-14 00:54:33 +08:00
14 changed files with 484 additions and 73 deletions
@@ -7,14 +7,11 @@ use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounting\Services\UpdatesBankStatementDetails;
use App\Classes\Modules\Accounting\Services\FetchesBankStatementDetails;
use App\Classes\Modules\Accounting\Standards\Rules\CanUpdateCompany;
use App\Classes\Modules\Accounting\DataTransferObjects\BankStatementDetailObject;
use App\Classes\Modules\Accounting\DataTransferObjects\BankStatementTransactionObject;
use App\Http\Resources\BankStatementDetailResource;
use App\Classes\Modules\Accounting\Services\CreatesBankStatementTransactionOwner;
use App\Classes\Modules\Accounting\Services\FetchesBankStatementTransaction;
use App\Classes\ValueObjects\Constants\StatementTransactionOwnerType;
use App\Classes\ValueObjects\Constants\SystemType;
use App\Classes\Modules\Accounting\Processors\ChecksBillNumber;
use App\Models\Transaction;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -49,19 +46,24 @@ class UpdateBankStatementDetailLogic extends AbstractControllerLogic
/** @var CreatesBankStatementTransactionOwner */
private $createsBankStatementTransactionOwner;
/** @var ChecksBillNumber */
private $checksBillNumber;
/**
* UpdateBankStatementDetailLogic constructor.
* @param UpdatesBankStatementDetails $updatesBankStatementDetails
* @param FetchesBankStatementDetails $fetchesBankStatementDetails
* @param fetchesBankStatementTransaction $fetchesBankStatementTransaction
* @param CreatesBankStatementTransactionOwner $createsBankStatementTransactionOwner
* @param ChecksBillNumber $checksBillNumber
*/
public function __construct(UpdatesBankStatementDetails $updatesBankStatementDetails, FetchesBankStatementDetails $fetchesBankStatementDetails, FetchesBankStatementTransaction $fetchesBankStatementTransaction, CreatesBankStatementTransactionOwner $createsBankStatementTransactionOwner)
public function __construct(UpdatesBankStatementDetails $updatesBankStatementDetails, FetchesBankStatementDetails $fetchesBankStatementDetails, FetchesBankStatementTransaction $fetchesBankStatementTransaction, CreatesBankStatementTransactionOwner $createsBankStatementTransactionOwner, ChecksBillNumber $checksBillNumber)
{
$this->updatesBankStatementDetails = $updatesBankStatementDetails;
$this->fetchesBankStatementDetails = $fetchesBankStatementDetails;
$this->fetchesBankStatementTransaction = $fetchesBankStatementTransaction;
$this->createsBankStatementTransactionOwner = $createsBankStatementTransactionOwner;
$this->checksBillNumber = $checksBillNumber;
}
@@ -83,7 +85,8 @@ class UpdateBankStatementDetailLogic extends AbstractControllerLogic
switch ($request->input('pay_for')) {
case 'sales':
if (in_array($request->input('system_references'), ['exchange', 'izyim'])) {
$transaction = $this->verifyBillNumber($request->input('transaction_reference'), $request->input('system_references'));
// $transaction = $this->verifyBillNumber($request->input('transaction_reference'), $request->input('system_references'));
$transaction = $this->checksBillNumber->execute($request->input('transaction_reference'), $request->input('system_references'));
// todo-new: update / test on izyim system
@@ -117,7 +120,8 @@ class UpdateBankStatementDetailLogic extends AbstractControllerLogic
case 'top_up':
$transaction = $this->verifyBillNumber($request->input('transaction_reference'), $request->input('system_references'));
// $transaction = $this->verifyBillNumber($request->input('transaction_reference'), $request->input('system_references'));
$transaction = $this->checksBillNumber->execute($request->input('transaction_reference'), $request->input('system_references'));
$owner_type = Transaction::class;
$owner_id = $transaction->id;
@@ -174,38 +178,38 @@ class UpdateBankStatementDetailLogic extends AbstractControllerLogic
// return $this->resourceResponse(new BankStatementDetailResource($query));
}
public function verifyBillNumber($bill_no, $system_reference)
{
if ($system_reference == 'izyim') {
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={"bill_no":' . $bill_no . '}');
$body = $response->getBody();
$data = json_decode($body, true);
dd($data);
$payload = $data['payload'];
$transactions2 = $payload['data'];
dd($transactions2);
return $transactions2;
} catch (\Exception $exception) {
Log::error($exception);
dd($exception);
preg_match('/\{.*\}/s', $exception->getMessage(), $matches);
$jsonError = json_decode($matches[0]);
// Retrieved Transactions failed
throw new MalformedRequestException($jsonError->title);
}
}
// public function verifyBillNumber($bill_no, $system_reference)
// {
// if ($system_reference == 'izyim') {
// 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={"bill_no":' . $bill_no . '}');
// $body = $response->getBody();
// $data = json_decode($body, true);
// dd($data);
// $payload = $data['payload'];
// $transactions2 = $payload['data'];
// dd($transactions2);
// return $transactions2;
// } catch (\Exception $exception) {
// Log::error($exception);
// dd($exception);
// preg_match('/\{.*\}/s', $exception->getMessage(), $matches);
// $jsonError = json_decode($matches[0]);
// // Retrieved Transactions failed
// throw new MalformedRequestException($jsonError->title);
// }
// }
if ($system_reference == 'exchange') {
$transaction = Transaction::where('bill_no', $bill_no)->first();
if ($transaction) {
return $transaction;
}
}
// if ($system_reference == 'exchange') {
// $transaction = Transaction::where('bill_no', $bill_no)->first();
// if ($transaction) {
// return $transaction;
// }
// }
// if not found
throw new MalformedRequestException('Bill Number Not Found.');
}
// // if not found
// throw new MalformedRequestException('Bill Number Not Found.');
// }
}
@@ -0,0 +1,45 @@
<?php
namespace App\Classes\Modules\Accounting\Processors;
use App\Classes\Exceptions\MalformedRequestException;
use App\Models\Transaction;
use Illuminate\Support\Facades\Log;
class ChecksBillNumber
{
public function execute($bill_no, $system_reference)
{
if ($system_reference == 'izyim') {
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={"bill_no":' . $bill_no . '}');
$body = $response->getBody();
$data = json_decode($body, true);
dd($data);
$payload = $data['payload'];
$transactions2 = $payload['data'];
dd($transactions2);
return $transactions2;
} catch (\Exception $exception) {
Log::error($exception);
dd($exception);
preg_match('/\{.*\}/s', $exception->getMessage(), $matches);
$jsonError = json_decode($matches[0]);
// Retrieved Transactions failed
throw new MalformedRequestException($jsonError->title);
}
}
if ($system_reference == 'exchange') {
$transaction = Transaction::where('bill_no', $bill_no)->first();
if ($transaction) {
return $transaction;
}
}
// if not found
throw new MalformedRequestException('Bill Number Not Found.');
}
}
@@ -25,6 +25,7 @@ use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use App\Classes\Modules\Wallets\Services\RecalculatesWalletBalance;
class CallbackBillplzLogic
{
@@ -45,20 +46,25 @@ class CallbackBillplzLogic
/** @var CreateCashBackTransactionProcessor */
private $createCashBackTransactionProcessor;
/** @var RecalculatesWalletBalance */
private $recalculatesWalletBalance;
/**
* CallbackBillplzLogic constructor.
* @param GetBillplzBill $getBillplzBill
* @param FetchesTransaction $fetchesTransaction
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param UpdatesWalletBalance $updatesWalletBalance
* @param RecalculatesWalletBalance $recalculatesWalletBalance
*/
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdatesWalletBalance $updatesWalletBalance, CreateCashBackTransactionProcessor $createCashBackTransactionProcessor)
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdatesWalletBalance $updatesWalletBalance, CreateCashBackTransactionProcessor $createCashBackTransactionProcessor, RecalculatesWalletBalance $recalculatesWalletBalance)
{
$this->getBillplzBill = $getBillplzBill;
$this->fetchesTransaction = $fetchesTransaction;
$this->updatesTransactionStatus = $updatesTransactionStatus;
$this->updatesWalletBalance = $updatesWalletBalance;
$this->createCashBackTransactionProcessor = $createCashBackTransactionProcessor;
$this->recalculatesWalletBalance = $recalculatesWalletBalance;
}
@@ -92,12 +98,11 @@ class CallbackBillplzLogic
}
if($transaction->status !== ApprovalStatus::COMPLETED && $transaction->status !== ApprovalStatus::APPROVED){
if($transaction->owner instanceof Wallet && $transaction->status !== ApprovalStatus::APPROVED && $status === ApprovalStatus::APPROVED) {
$this->updatesWalletBalance->execute($transaction->owner, $transaction->amount);
}
$this->updatesTransactionStatus->execute($transaction, $status);
}
if($transaction->owner instanceof Wallet) {
$this->updatesWalletBalance->execute($transaction->owner, $transaction->amount);
}
// if ($transaction->type == TransactionType::PAYMENT) {
@@ -65,7 +65,7 @@ class AutoPurchaseOrderFillLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
$bookings = Booking::where('service_id', '!=', 4)->where(function($query){
return $query->whereMonth('created_at', '<', 03)->whereYear('created_at', 2023);
return $query->whereMonth('created_at', '=', 04)->whereYear('created_at', 2023);
})->whereDoesntHave('transactions', function($q){
$q->where('type', TransactionType::PURCHASE_ORDER);
$q->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED]);
@@ -29,6 +29,7 @@ use App\Models\Wallet;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\Modules\Wallets\Services\RecalculatesWalletBalance;
class CreateBookingPaymentLogic extends AbstractControllerLogic
{
@@ -70,6 +71,9 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic
/** @var CreateCashBackTransactionProcessor */
private $createCashBackTransactionProcessor;
/** @var RecalculatesWalletBalance */
private $recalculatesWalletBalance;
/**
* CreateBookingPaymentLogic constructor.
* @param FetchesBookingQuotation $fetchBookingQuotation
@@ -81,8 +85,9 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic
* @param UpdatesWalletBalance $updatesWalletBalance
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param CreateCashBackTransactionProcessor $createCashBackTransactionProcessor
* @param RecalculatesWalletBalance $recalculatesWalletBalance
*/
public function __construct(FetchesBookingQuotation $fetchBookingQuotation, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CalculatesBookingOutstanding $calculatesBookingOutstanding, CreatesBillplzBill $createsBillplzBill, UpdatesWalletBalance $updatesWalletBalance, UpdatesTransactionStatus $updatesTransactionStatus, CreateCashBackTransactionProcessor $createCashBackTransactionProcessor)
public function __construct(FetchesBookingQuotation $fetchBookingQuotation, FetchesCompanyPaymentAttemptLimit $fetchesCompanyPaymentAttemptLimit, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CalculatesBookingOutstanding $calculatesBookingOutstanding, CreatesBillplzBill $createsBillplzBill, UpdatesWalletBalance $updatesWalletBalance, UpdatesTransactionStatus $updatesTransactionStatus, CreateCashBackTransactionProcessor $createCashBackTransactionProcessor, RecalculatesWalletBalance $recalculatesWalletBalance)
{
$this->fetchBookingQuotation = $fetchBookingQuotation;
$this->fetchesCompanyPaymentAttemptLimit = $fetchesCompanyPaymentAttemptLimit;
@@ -93,6 +98,7 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic
$this->updatesWalletBalance = $updatesWalletBalance;
$this->updatesTransactionStatus = $updatesTransactionStatus;
$this->createCashBackTransactionProcessor = $createCashBackTransactionProcessor;
$this->recalculatesWalletBalance = $recalculatesWalletBalance;
}
/**
@@ -138,7 +144,8 @@ class CreateBookingPaymentLogic extends AbstractControllerLogic
$paymentReference = $billNumber;
$this->updatesWalletBalance->execute($wallet, ($amount * -1));
$walletBalance = $this->recalculatesWalletBalance->execute($wallet);
$this->updatesWalletBalance->execute($wallet, $walletBalance);
}
$billNumber = $this->generatesTransactionBillNumber->execute('PYMT-');
@@ -0,0 +1,48 @@
<?php
namespace App\Classes\Modules\Wallets\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
use App\Models\Wallet;
class RecalculatesWalletBalance extends AbstractUpdateRecord
{
private $updatesWalletBalance;
public function __construct(UpdatesWalletBalance $updatesWalletBalance)
{
$this->updatesWalletBalance = $updatesWalletBalance;
}
/**
* @param Wallet $model
* @param $amount
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Wallet $wallet)
{
$i = 0;
$topups = 0;
$credit = 0;
$payments = 0;
$debit = 0;
foreach ($wallet->transactions as $transaction) {
if (!in_array((int) $transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) continue;
if ((int) $transaction->type === TransactionType::TOP_UP) {
$topups += (float) $transaction->amount;
}
if ((int) $transaction->type === TransactionType::CREDIT_NOTE) $credit += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::PAYMENT) $payments += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::DEBIT_NOTE) $debit += (float) $transaction->amount;
}
$auditBalance = ($topups + $credit) - ($payments + $debit);
return $auditBalance;
}
}
@@ -3,10 +3,9 @@
namespace App\Classes\Modules\Wallets\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Wallets\DataTransferObjects\WalletObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Wallet;
use App\Models\Company;
class UpdatesWalletBalance extends AbstractUpdateRecord
{
@@ -16,10 +15,24 @@ class UpdatesWalletBalance extends AbstractUpdateRecord
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Wallet $model, $amount) {
public function execute(Wallet $model, $amount)
{
$i = 0;
$topups = 0;
$credit = 0;
$payments = 0;
$debit = 0;
$model->amount = $model->amount + $amount;
foreach ($model->transactions as $transaction) {
if (!in_array((int) $transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) continue;
if ((int) $transaction->type === TransactionType::TOP_UP) $topups += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::CREDIT_NOTE) $credit += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::PAYMENT) $payments += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::DEBIT_NOTE) $debit += (float) $transaction->amount;
}
$auditBalance = ($topups + $credit) - ($payments + $debit);
$model->amount = $auditBalance;
return $this->handler($model);
}
}
@@ -0,0 +1,79 @@
<?php
namespace App\Console\Commands;
use App\Models\SeasonalSegment;
use Illuminate\Console\Command;
use Carbon\Carbon;
use App\Classes\Modules\Companies\Services\RemovesCompanyFromSegment;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Wallet;
class AuditAndUpdateWallletBalance extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'auditWalletBalance';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Audit and Update Wallet Balance';
/** @var RemovesCompanyFromSegment */
private $removesCompanyFromSegment;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct(RemovesCompanyFromSegment $removesCompanyFromSegment)
{
parent::__construct();
$this->removesCompanyFromSegment = $removesCompanyFromSegment;
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$wallets = Wallet::all();
$i = 0;
foreach ($wallets as $wallet) {
$topups = 0;
$credit = 0;
$payments = 0;
$debit = 0;
foreach ($wallet->transactions as $transaction) {
if (!in_array((int) $transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) continue;
if ((int) $transaction->type === TransactionType::TOP_UP) {
$topups += (float) $transaction->amount;
}
if ((int) $transaction->type === TransactionType::CREDIT_NOTE) $credit += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::PAYMENT) $payments += (float) $transaction->amount;
if ((int) $transaction->type === TransactionType::DEBIT_NOTE) $debit += (float) $transaction->amount;
}
$auditBalance = ($topups + $credit) - ($payments + $debit);
$diffenrence = round((float) $wallet->amount - (($topups + $credit) - ($payments + $debit)), 2);
if ((($diffenrence == 0) || ($diffenrence == -0)) and $wallet->amount > -0.01) continue;
$i++;
$this->info($i . ". Marking: " . $wallet->owner->reference . "(" . $wallet->id . ")" . PHP_EOL . "Current Balance: " . $wallet->amount . PHP_EOL . "Audit Balance: " . ($auditBalance) . PHP_EOL . "Difference: " . $diffenrence . PHP_EOL);
Wallet::where('id', $wallet->id)->update(['amount' => $auditBalance]);
}
}
}
@@ -33,9 +33,18 @@ class ImportHoneyTrapController
$excelRows = $import->rows;
$excelRows = $excelRows->toArray();
$returnArray = [];
$returnArray = [];
$segment_name = 'honey trap campaign';
$segment = Segment::where('name', $segment_name)->first();
$segment_id = Segment::where('name', 'honey trap platinum')->first()->id;
if (!$segment) {
$row['status'] = 'Failed';
$row['message'] = '"' . $segment_name . '"' . ' not found';
$returnArray[] = $row;
return response()->json($returnArray);
}
$segment_id = $segment->id;
foreach ($excelRows as $row) {
@@ -111,6 +120,6 @@ class ImportHoneyTrapController
{
$unixTime = (($date - 25569) * 86400);
$date = new DateTime("@$unixTime");
return $date->format('d/m/Y');
return $date->format('Y-m-d'); // Change the format to 'Y-m-d'
}
}
@@ -0,0 +1,99 @@
<?php
namespace App\Http\Controllers\Imports;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Imports\Services\GenericImport;
use App\Classes\Modules\Segments\DataTransferObjects\SeasonalSegmentObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Segment;
use App\Models\User;
use Carbon\Carbon;
use DateTime;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Classes\Modules\Segments\Services\CreatesSeasonalSegment;
use App\Classes\Modules\Companies\Processors\AssignSegmentProcessor;
use App\Models\Company;
use App\Models\SeasonalSegment;
use App\Models\Transaction;
class ImportStatementInvoiceController
{
/**
* @param Request $request
* @return array
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function import(Request $request)
{
ini_set('memory_limit', '-1');
$object = new DocumentObject('', $request->input('files'), '', ApprovalStatus::APPROVED, 'imports');
$file = json_decode($object->getFiles()[0])->file_info->original->file;
$import = new GenericImport();
Excel::import($import, $file);
$excelRows = $import->rows;
$excelRows = $excelRows->toArray();
foreach ($excelRows as $row) {
dd($row);
// $row['debtor_code']
// attempt 1 - try map by amount and date
// $transactionDate = $this->changeExcelDate($row['date']);
// $transaction = Transaction::where('original_amount', $row['total'])->whereDate('created_at', $transactionDate)->get();
// if ($transaction) {
// // check company
// // $company = Company::where('debtor', $row['debtor_code'])->first();
// // dd($company);
// // try to verify is it the correct transaction
// }
// Shipping Info
// TOPUP -> map with transaction.bill_no
if (str_starts_with($row['shipping_info'], 'TOPUP')) {
// find in exchange first, if cannont then find in izyim
// (App()->make(ChecksBillNumber::class))->execute($bill_no, 'exchange');
}
// if 5 digits -> exchange booking reference
// find transation
// find statement_transaction_owners, and fill up the details
// if <5 digits, find the transaction id (order number in izyim), find the payment in izyim
// find transation
// find statement_transaction_owners, and fill up the details
// dd([
// 'type' => $statementTransactionOwnerType,
// 'system' => $system,
// // 'owner_type' => Transaction::class,
// // todo-new: make sure owner_type is a class
// 'owner_type' => $owner_type,
// 'owner_id' => $owner_id,
// 'owner_reference' => $owner_reference
// ]);
// $bankStatementTransaction->owners()->firstOrCreate([
// 'type' => $statementTransactionOwnerType,
// 'system' => $system,
// // 'owner_type' => Transaction::class,
// // todo-new: make sure owner_type is a class
// 'owner_type' => $owner_type,
// 'owner_id' => $owner_id,
// 'owner_reference' => $owner_reference
// ]);
}
}
public function changeExcelDate($date)
{
$unixTime = (($date - 25569) * 86400);
$date = new DateTime("@$unixTime");
return $date->format('Y-m-d'); // Change the format to 'Y-m-d'
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Http\Controllers\Imports;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Imports\Services\GenericImport;
use App\Classes\Modules\Segments\DataTransferObjects\SeasonalSegmentObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Segment;
use App\Models\User;
use Carbon\Carbon;
use DateTime;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Classes\Modules\Segments\Services\CreatesSeasonalSegment;
use App\Classes\Modules\Companies\Processors\AssignSegmentProcessor;
use App\Models\Company;
use App\Models\SeasonalSegment;
use App\Models\Transaction;
class ImportStatementReceiptsController
{
/**
* @param Request $request
* @return array
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function import(Request $request)
{
$object = new DocumentObject('', $request->input('files'), '', ApprovalStatus::APPROVED, 'imports');
$file = json_decode($object->getFiles()[0])->file_info->original->file;
$import = new GenericImport();
Excel::import($import, $file);
$excelRows = $import->rows;
$excelRows = $excelRows->toArray();
foreach ($excelRows as $row) {
// if has date column
// $transactionDate = $this->changeExcelDate($row['date']);
}
}
public function changeExcelDate($date)
{
$unixTime = (($date - 25569) * 86400);
$date = new DateTime("@$unixTime");
return $date->format('Y-m-d'); // Change the format to 'Y-m-d'
}
}
@@ -55,16 +55,16 @@
<div class="col"></div>
<div class="col-auto pointer bold text-danger" @click="step=0">X</div>
</div>
<div class="row parentContainer" v-show="step > 0 && stage !== 4">
<div class="row parentContainer" v-if="step > 0 && stage !== 4">
<div class="col">
<div class="row">
<div class="col">
<div v-if="stage === 1">
<div class="btn btn-primary btn-sm m-t-10 requestModal" data-type="approveMappingTransaction">Approve all the Mapping Below</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" type="approveMappingTransaction">
<general-confirmation-form-component
contentText="Are you sure you want to approve all these Transaction?"
modalType="confirm"
<general-confirmation-form-component
contentText="Are you sure you want to approve all these Transaction?"
modalType="confirm"
class="text-center"
:apiRoute="route('api.accounting.statement_transaction.owner.groupApprove')"
apiMethod="post"
@@ -89,9 +89,9 @@
</div>
</div>
</div>
<list-component ref="bankTransactionsList" section="bankTransactionSection" :endpoint="route('api.accounting.bank.transaction')" :options="this.filter" :key="componentKey">
<list-component ref="bankTransactionsList" section="bankTransactionSection" :endpoint="route('api.accounting.bank.transaction')" :options="this.filter">
<template slot="list" slot-scope="{data}">
<statement-transaction-component :data="data" section="bankTransactionSection" :stage="stage"></statement-transaction-component>
<statement-transaction-component :data="data" :section="section" :stage="stage"></statement-transaction-component>
</template>
</list-component>
</div>
@@ -105,10 +105,18 @@
<div class="btn btn-lg btn-primary" @click="exportStage++">Export Invoices To AutoCount</div>
</div>
</div>
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-show="exportStage === 1">
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-if="exportStage === 1">
<div class="col">
<file-upload-component></file-upload-component>
<div class="btn btn-lg btn-primary m-t-20" @click="exportStage++">Import Invoices</div>
<div class="row">
<div class="col">
<file-input-component :validator="$v.files" v-model="files">
<template slot="label">
</template>
</file-input-component>
</div>
</div>
<div class="btn btn-lg btn-primary m-t-20" @click="importInvoice">Import Invoices</div>
<!-- todo-new: delete later --><br><div class="btn btn-lg btn-primary m-t-20" @click="exportStage++">Nest Step</div>
</div>
</div>
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-show="exportStage === 2">
@@ -116,10 +124,18 @@
<div class="btn btn-lg btn-primary" @click="exportStage++">Export Receipts To AutoCount</div>
</div>
</div>
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-show="exportStage === 3">
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-if="exportStage === 3">
<div class="col">
<file-upload-component></file-upload-component>
<div class="btn btn-lg btn-primary m-t-20" @click="exportStage++">Import Receipts</div>
<div class="row">
<div class="col">
<file-input-component :validator="$v.files" v-model="files">
<template slot="label">
</template>
</file-input-component>
</div>
</div>
<div class="btn btn-lg btn-primary m-t-20" @click="importReceipts">Import Receipts</div>
<!-- todo-new: delete later --><br><div class="btn btn-lg btn-primary m-t-20" @click="exportStage++">Nest Step</div>
</div>
</div>
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-show="exportStage === 4">
@@ -133,7 +149,12 @@
</div>
</template>
<script>
import { required } from "vuelidate/lib/validators";
export default {
components: {},
data(){
return {
type: null,
@@ -141,18 +162,44 @@ export default {
exportStage: 0,
step: 0,
filter: {},
files: [],
parameters: {},
section: 'bankTransactionSection',
componentKey: 1,
}
},
validations: {
files: {
// required // todo-new: set required if is pdf section
}
},
methods: {
importInvoice(){
this.parameters = {
files: this.files
};
this.submit(this.route('api.import_invoices.upload'), 'post', this.section, true, false);
},
importReceipts(){
this.parameters = {
files: this.files
};
this.submit(this.route('api.import_receipts.upload'), 'post', this.section, true, false);
},
successHandler(){
this.step += 1;
// reset parameters
this.files = [];
this.parameters = {};
},
startMapping(stage){
this.stage = stage;
this.exportStage = 0;
if(this.type === 1){
switch(this.stage){
case 1:
this.filter = {min_amount: 0, is_mapped: true, is_mapped_with_multiple: false, statement_transaction_owner_type_in: [1, 2], statement_transaction_owner_status_in: [1], per_page: 10000, order_by: {column: 'posting_date', DESC: true}}
this.filter = {min_amount: 0, is_mapped: true, is_mapped_with_multiple: false, statement_transaction_owner_type_in: [1, 2], statement_transaction_owner_status_in: [1], per_page: 100, order_by: {column: 'posting_date', DESC: true}}
break;
case 2:
this.filter = {min_amount: 0, is_mapped: true, is_mapped_with_multiple: true, statement_transaction_owner_type_in: [1, 2], statement_transaction_owner_status_in: [1], per_page: 100, order_by: {column: 'posting_date', DESC: true}}
@@ -184,9 +231,11 @@ export default {
}
this.step = 1;
this.componentKey += 1;
// this.$refs.bankTransactionsList.$forceUpdate();
// this.$refs.bankTransactionsList.updateFilters(this.filter);
if(this.$refs.bankTransactionsList){
this.$refs.bankTransactionsList.updateFilters(this.filter);
}
}
}
@@ -36,6 +36,7 @@
@endphp
<section id="customer-account" class="m-b-50">
<h3>Customer Account</h3>
<p>Company Id: <span>{{$company->id}}</span></p>
<p>Marking: <span><a href="{{route('customer.profile', $company->reference)}}" target="_blank">{{$company->reference}}</a></span></p>
<p>Account Type: <span>{{$company->type === 1 ? 'Business' : 'Personal'}}</span></p>
@if($company->type === 1)<p>Company's Name: <span>{{$company->name}}</span></p>@endif
+2
View File
@@ -30,6 +30,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file');
Route::post('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import')->name('debtor.import');
Route::post('/import/upload-honey-trap', 'Imports\ImportHoneyTrapController@import')->name('honey_trap.upload');
Route::post('/import/upload-import-invoices', 'Imports\ImportStatementInvoiceController@import')->name('import_invoices.upload');
Route::post('/import/upload-import-receipt', 'Imports\ImportStatementReceiptsController@import')->name('import_receipts.upload');
require __DIR__ . '/company.php';