From 482487643f1351c574e7f75e1a9c02599c3764fe Mon Sep 17 00:00:00 2001 From: Djery-Tom Date: Thu, 25 Jun 2020 09:01:59 +0100 Subject: [PATCH] + Add generated id for transactions --- app/Http/Controllers/WalletController.php | 7 +- .../iLinkTransactionController.php | 38 ++-- app/Models/CountriesCurrency.php | 52 +++++ app/Models/WalletIlinkTransaction.php | 190 +++++++++--------- app/Traits/Helper.php | 25 ++- resources/lang/en/messages.php | 10 + resources/lang/fr/messages.php | 10 + 7 files changed, 216 insertions(+), 116 deletions(-) create mode 100644 app/Models/CountriesCurrency.php diff --git a/app/Http/Controllers/WalletController.php b/app/Http/Controllers/WalletController.php index 1ca68b8..b894b28 100755 --- a/app/Http/Controllers/WalletController.php +++ b/app/Http/Controllers/WalletController.php @@ -2,10 +2,9 @@ namespace App\Http\Controllers; -use App\Models\Wallet; -use App\Models\User; use App\Models\WalletsUser; use App\Traits\ApiResponser; +use App\Traits\Helper; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; @@ -13,6 +12,7 @@ use Illuminate\Support\Facades\DB; class WalletController extends Controller { use ApiResponser; + use Helper; /** * Create a new controller instance. @@ -104,6 +104,9 @@ class WalletController extends Controller if($wallet){ $wallet->country = 'Gabon'; $wallet->network = 'iLink World'; + $walletUser = WalletsUser::findOrFail($wallet->id); + $init_country = $walletUser->user->network->country->id; + $wallet->currency_code = $this->getCurrency($init_country); return $this->successResponse($wallet); } else return $this->errorResponse(trans('errors.model_not_found',['model'=>'wallet']),Response::HTTP_BAD_REQUEST); diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index 029cb38..76f2282 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -137,13 +137,13 @@ class iLinkTransactionController extends Controller $transaction->part_reseau_emetteur = $frais; } $transaction->commission_hyp = $transaction->part_reseau_emetteur; - $reseauPayeur->balance_com += $transaction->part_reseau_payeur; + $reseauPayeur->balance_com += $this->toMoneyAmount($transaction->part_reseau_payeur,$init_country,$request->final_country); if ($configPayeur->type == 'ilink') { $destinataire = User::where('user_code', $request->id_destinataire)->first(); if ($destinataire) { // Si c'est un wallet ilink if ($destinataire->network->country->id == $request->final_country) { $walletDestinataire = WalletsUser::where('idUser', $destinataire->id)->firstOrFail(); - $walletDestinataire->balance += $montantDepot; + $walletDestinataire->balance += $this->toMoneyAmount($montantDepot,$init_country,$request->final_country); $walletDestinataire->save(); } else { $country = Country::findOrFail($request->final_country); @@ -156,12 +156,12 @@ class iLinkTransactionController extends Controller $hyperviseurPayeur = AgentPlus::where('category', 'hyper')->where('network_id', $request->network_destinataire)->firstOrFail(); if ($hyperviseurPayeur->id == $hyperviseur->id) { //Si c'est le reseau payeur est aussi emetteur $walletHyperviseur->balance_com += $transaction->part_reseau_payeur; - $reseauPayeur->balance_com += $transaction->part_reseau_emetteur; + $reseauPayeur->balance_com += $this->toMoneyAmount($transaction->part_reseau_emetteur,$init_country,$request->final_country); $transaction->id_wallet_hyp_payeur = $walletHyperviseur->id; } else { $wallet_agent_hypPayeur = WalletAgent::where('agent_id', $hyperviseurPayeur->id)->firstOrFail(); $walletHyperviseurPayeur = Wallet::findOrFail($wallet_agent_hypPayeur->wallet_id); - $walletHyperviseurPayeur->balance_com += $transaction->part_reseau_payeur; + $walletHyperviseurPayeur->balance_com += $this->toMoneyAmount($transaction->part_reseau_payeur,$init_country,$request->final_country); $transaction->id_wallet_hyp_payeur = $walletHyperviseurPayeur->id; $walletHyperviseurPayeur->save(); } @@ -174,17 +174,22 @@ class iLinkTransactionController extends Controller $walletHyperviseur->balance_com += $transaction->part_reseau_emetteur; $walletUser->balance -= $transaction->montant; $transaction->id_wallet_hyp = $walletHyperviseur->id; + $transaction->id_transaction = $this->getTransactionID(); $walletHyperviseur->save(); $walletUser->save(); $reseauPayeur->save(); $transaction->save(); $this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_wallet', - ['id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $init_country), 'net_init' => $this->toMoney($montantDepot, $init_country), - 'net_final' => $this->convertMoney($montantDepot, $init_country, $request->final_country), 'fees' => $this->toMoney($frais + $taxe, $init_country), + ['id_transaction' => $transaction->id_transaction , 'amount' => $this->toMoney($transaction->montant, $init_country), 'net_init' => $this->toMoney($montantDepot, $init_country), + 'net_final' => $this->toMoneyWithCurrency($montantDepot, $init_country, $request->final_country), 'fees' => $this->toMoney($frais + $taxe, $init_country), + 'init_country' => $this->getCountryName($init_country), 'final_country' => $this->getCountryName($request->final_country), + 'sender_code' => $user->user_code, 'receiver_code' => $transaction->id_destinataire])); + return $this->successResponse(trans('messages.successful_user_send_to_wallet_2', + ['amount' => $this->toMoney($transaction->montant, $init_country), 'net_init' => $this->toMoney($montantDepot, $init_country), + 'net_final' => $this->toMoneyWithCurrency($montantDepot, $init_country, $request->final_country), 'fees' => $this->toMoney($frais + $taxe, $init_country), 'init_country' => $this->getCountryName($init_country), 'final_country' => $this->getCountryName($request->final_country), 'sender_code' => $user->user_code, 'receiver_code' => $transaction->id_destinataire])); - return $this->successResponse(trans('messages.successful_transaction')); } } else { return $this->errorResponse(trans('messages.incorrect_user_password')); @@ -222,9 +227,10 @@ class iLinkTransactionController extends Controller $transaction->date = new \DateTime(); $walletHyperviseur->save(); $walletUser->save(); + $transaction->id_transaction = $this->getTransactionID(); $transaction->save(); $this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_cart', - ['id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $init_country), + ['id_transaction' => $transaction->id_transaction, 'amount' => $this->toMoney($transaction->montant, $init_country), 'net' => $this->toMoney($montantDepot, $init_country), 'fees' => $this->toMoney($frais, $init_country), 'sender_code' => $user->user_code, 'cart_number' => wordwrap($request->numero_carte, 4, ' ', true)])); return $this->successResponse(trans('messages.successful_transaction')); @@ -394,7 +400,7 @@ class iLinkTransactionController extends Controller $transaction->save(); $this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_deposit_ilink', ['id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $request->init_country), 'net_init' => $this->toMoney($montantDepot, $request->init_country), - 'net_final' => $this->convertMoney($montantDepot, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais, $request->init_country), 'tax' => $this->toMoney($taxe, $request->init_country), + 'net_final' => $this->toMoneyWithCurrency($montantDepot, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais, $request->init_country), 'tax' => $this->toMoney($taxe, $request->init_country), 'user_code' => $request->user_code])); return $this->successResponse(trans('messages.successful_transaction')); } else { @@ -537,7 +543,7 @@ class iLinkTransactionController extends Controller $this->sendMail($request->email_emetteur, trans('messages.successful_transaction'), trans('messages.successful_send_cash', ['sender_name' => $request->prenom_emetteur . ' ' . $request->nom_emetteur, 'receiver_name' => $request->prenom_destinataire . ' ' . $request->prenom_destinataire, 'id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $request->init_country), 'net_init' => $this->toMoney($montantRetrait, $request->init_country), - 'net_final' => $this->convertMoney($montantRetrait, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais, $request->init_country), 'tax' => $this->toMoney($taxe, $request->init_country), + 'net_final' => $this->toMoneyWithCurrency($montantRetrait, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais, $request->init_country), 'tax' => $this->toMoney($taxe, $request->init_country), 'code' => wordwrap($code_retrait, 4, ' ', true)])); return $this->successResponse(trans('messages.successful_transaction')); } else { @@ -640,15 +646,17 @@ class iLinkTransactionController extends Controller $frais = ($init_country != $request->final_country) ? $this->calculateFees($plr_user_wallet_wallet, $request->montant) : $this->calculateFees($plr_user_wallet_wallet_national, $request->montant); $taxe = ($init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais); $destinataire = User::where('user_code', $request->id_destinataire)->first(); - $data['destinataire'] = $destinataire ? $destinataire->lastname . ' ' . $destinataire->firstname : 'Inconnu'; - $data['frais'] = $frais + $taxe; - $data['montant_net'] = $request->montant - $frais - $taxe; + $data['destinataire'] = $destinataire ? $destinataire->lastname . ' ' . $destinataire->firstname : $request->id_destinataire; + $data['frais'] = $this->toMoney($frais + $taxe, $init_country); + $data['montant_net_init'] = $this->toMoney($request->montant - $frais - $taxe, $init_country); + $data['montant_net_final'] = $this->toMoneyWithCurrency($request->montant - $frais - $taxe, $init_country ,$request->final_country ); return $this->successResponse($data); break; case 2: //User - Envoi de wallet à carte $frais = $request->montant * $config->taux_com_user_wallet_carte / 100; - $data['frais'] = $frais; - $data['montant_net'] = $request->montant - $frais; + $data['frais'] = $this->toMoney($frais, $init_country); + $data['montant_net_init'] = $this->toMoney($request->montant - $frais, $init_country); + $data['montant_net_final'] = $this->toMoneyWithCurrency($request->montant - $frais, $init_country ,$request->final_country ); return $this->successResponse($data); break; } diff --git a/app/Models/CountriesCurrency.php b/app/Models/CountriesCurrency.php new file mode 100644 index 0000000..834a8f7 --- /dev/null +++ b/app/Models/CountriesCurrency.php @@ -0,0 +1,52 @@ + 'int', + 'longitude' => 'float', + 'latitude' => 'float', + 'idCurrency' => 'int' + ]; + + protected $fillable = [ + 'id', + 'code_dial', + 'name', + 'code_country', + 'longitude', + 'latitude', + 'idCurrency', + 'currency_code', + 'currency_name_en', + 'currency_name_fr' + ]; +} diff --git a/app/Models/WalletIlinkTransaction.php b/app/Models/WalletIlinkTransaction.php index ea86191..fa3ef52 100644 --- a/app/Models/WalletIlinkTransaction.php +++ b/app/Models/WalletIlinkTransaction.php @@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Model; * Class WalletIlinkTransaction * * @property int $id + * @property string $id_transaction * @property float $montant * @property float $montant_depot * @property float $montant_retrait @@ -64,108 +65,109 @@ use Illuminate\Database\Eloquent\Model; */ class WalletIlinkTransaction extends Model { - protected $table = 'wallet_ilink_transaction'; - public $timestamps = false; + protected $table = 'wallet_ilink_transaction'; + public $timestamps = false; - protected $casts = [ - 'montant' => 'float', - 'montant_depot' => 'float', - 'montant_retrait' => 'float', - 'status_retrait' => 'int', - 'network_destinataire' => 'int', - 'network_emetteur' => 'int', - 'frais' => 'float', - 'taxe' => 'float', - 'part_reseau_emetteur' => 'float', - 'part_reseau_payeur' => 'float', - 'init_country' => 'int', - 'final_country' => 'int', - 'commission_banque' => 'float', - 'commission_ag' => 'float', - 'commission_sup' => 'float', - 'commission_hyp' => 'float', - 'id_wallet_user' => 'int', - 'id_wallet_ag' => 'int', - 'id_wallet_sup' => 'int', - 'id_wallet_hyp' => 'int', - 'id_wallet_hyp_payeur' => 'int', - 'canceled' => 'int', - 'type' => 'int' - ]; + protected $casts = [ + 'montant' => 'float', + 'montant_depot' => 'float', + 'montant_retrait' => 'float', + 'status_retrait' => 'int', + 'network_destinataire' => 'int', + 'network_emetteur' => 'int', + 'frais' => 'float', + 'taxe' => 'float', + 'part_reseau_emetteur' => 'float', + 'part_reseau_payeur' => 'float', + 'init_country' => 'int', + 'final_country' => 'int', + 'commission_banque' => 'float', + 'commission_ag' => 'float', + 'commission_sup' => 'float', + 'commission_hyp' => 'float', + 'id_wallet_user' => 'int', + 'id_wallet_ag' => 'int', + 'id_wallet_sup' => 'int', + 'id_wallet_hyp' => 'int', + 'id_wallet_hyp_payeur' => 'int', + 'canceled' => 'int', + 'type' => 'int' + ]; - protected $dates = [ - 'date_retrait', - 'expiration_date', - 'date' - ]; + protected $dates = [ + 'date_retrait', + 'expiration_date', + 'date' + ]; - protected $fillable = [ - 'montant', - 'montant_depot', - 'montant_retrait', - 'encrypted_code_retrait', - 'code_retrait_salt', - 'status_retrait', - 'date_retrait', - 'id_destinataire', - 'type_id_destinataire', - 'network_destinataire', - 'type_document_destinataire', - 'id_document_destinataire', - 'nom_destinataire', - 'prenom_destinataire', - 'nom_emetteur', - 'prenom_emetteur', - 'email_emetteur', - 'network_emetteur', - 'type_document_emetteur', - 'id_document_emetteur', - 'frais', - 'taxe', - 'part_reseau_emetteur', - 'part_reseau_payeur', - 'numero_carte', - 'expiration_date', - 'init_country', - 'final_country', - 'commission_banque', - 'commission_ag', - 'commission_sup', - 'commission_hyp', - 'id_wallet_user', - 'id_wallet_ag', - 'id_wallet_sup', - 'id_wallet_hyp', - 'id_wallet_hyp_payeur', - 'canceled', - 'type', - 'date' - ]; + protected $fillable = [ + 'id_transaction', + 'montant', + 'montant_depot', + 'montant_retrait', + 'encrypted_code_retrait', + 'code_retrait_salt', + 'status_retrait', + 'date_retrait', + 'id_destinataire', + 'type_id_destinataire', + 'network_destinataire', + 'type_document_destinataire', + 'id_document_destinataire', + 'nom_destinataire', + 'prenom_destinataire', + 'nom_emetteur', + 'prenom_emetteur', + 'email_emetteur', + 'network_emetteur', + 'type_document_emetteur', + 'id_document_emetteur', + 'frais', + 'taxe', + 'part_reseau_emetteur', + 'part_reseau_payeur', + 'numero_carte', + 'expiration_date', + 'init_country', + 'final_country', + 'commission_banque', + 'commission_ag', + 'commission_sup', + 'commission_hyp', + 'id_wallet_user', + 'id_wallet_ag', + 'id_wallet_sup', + 'id_wallet_hyp', + 'id_wallet_hyp_payeur', + 'canceled', + 'type', + 'date' + ]; - public function country() - { - return $this->belongsTo(Country::class, 'final_country'); - } + public function country() + { + return $this->belongsTo(Country::class, 'final_country'); + } - public function wallet() - { - return $this->belongsTo(Wallet::class, 'id_wallet_sup'); - } + public function wallet() + { + return $this->belongsTo(Wallet::class, 'id_wallet_hyp_payeur'); + } - public function wallets_user() - { - return $this->belongsTo(WalletsUser::class, 'id_wallet_user'); - } + public function wallets_user() + { + return $this->belongsTo(WalletsUser::class, 'id_wallet_user'); + } - public function type_ilink_transaction() - { - return $this->belongsTo(TypeIlinkTransaction::class, 'type'); - } + public function type_ilink_transaction() + { + return $this->belongsTo(TypeIlinkTransaction::class, 'type'); + } - public function network() - { - return $this->belongsTo(Network::class, 'network_emetteur'); - } + public function network() + { + return $this->belongsTo(Network::class, 'network_emetteur'); + } // Regles de validation //Envoi de cash vers wallet iLink diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index 90b7fa0..df8be78 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -4,7 +4,9 @@ namespace App\Traits; +use App\Models\CountriesCurrency; use App\Models\Country; +use DateTime; use Illuminate\Support\Facades\Mail; use Brick\Money\CurrencyConverter; use Brick\Money\ExchangeRateProvider\PDOProvider; @@ -62,7 +64,7 @@ trait Helper return $money->formatTo('fr_FR'); } - public function convertMoney($amount , $init_country , $final_country) + private function convertMoney($amount , $init_country , $final_country) { // set to whatever your rates are relative to $baseCurrency = 'USD'; @@ -88,12 +90,25 @@ trait Helper $init_country = Country::findOrFail($init_country); $final_country = Country::findOrFail($final_country); $init_money = Money::of(round($amount, 0),$init_country->currency->code);; - $final_money = $converter->convert($init_money, $final_country->currency->code, RoundingMode::DOWN); - return $final_money->formatTo('fr_FR'); + return $converter->convert($init_money, $final_country->currency->code, RoundingMode::DOWN); } - public function getNetworkEmetteur($id_wallet){ - + public function toMoneyWithCurrency($amount , $init_country , $final_country){ + return $this->convertMoney($amount , $init_country , $final_country)->formatTo('fr_FR'); } + public function toMoneyAmount($amount , $init_country , $final_country){ + return $this->convertMoney($amount , $init_country , $final_country)->getAmount()->toFloat(); + } + + public function getTransactionID(){ + $d = new DateTime(); + $first = str_replace(['-',':'], '',$d->format("Y-m-d H:i:s.u")); + return str_replace(' ' ,'.',$first); + } + + public function getCurrency($id_country){ + $cc = CountriesCurrency::findOrFail($id_country); + return $cc->currency_code; + } } diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 60537a6..4313e4a 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -48,6 +48,16 @@ Transaction information: 'successful_user_send_to_wallet' => 'Money sent to a wallet. Transaction information: - Transaction ID : :id_transaction + - Amount of the transaction : :amount + - Country of departure: :init_country + - Net amount of the country of departure : :net_init + - Country of destination: :final_country + - Net amount of the destination country : :net_final + - Fees + Tax : :fees + - Number of the sending wallet: :sender_code + - Number of the recipient wallet: :receiver_code', + 'successful_user_send_to_wallet_2' => 'Money sent to a wallet. +Transaction information: - Amount of the transaction : :amount - Country of departure: :init_country - Net amount of the country of departure : :net_init diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index e2ba9ff..c6eaf42 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -48,6 +48,16 @@ Informations de la transaction : 'successful_user_send_to_wallet' => 'Envoi d\'argent vers un wallet effectué. Informations de la transaction : - Transaction ID : :id_transaction + - Montant de la transaction : :amount + - Pays de départ : :init_country + - Montant net du pays de départ : :net_init + - Pays de destination : :final_country + - Montant net du pays de destination : :net_final + - Frais et Taxe : :fees + - Numero du wallet émetteur : :sender_code + - Numero du wallet destinataire : :receiver_code', + 'successful_user_send_to_wallet_2' => 'Envoi d\'argent vers un wallet effectué. +Informations de la transaction : - Montant de la transaction : :amount - Pays de départ : :init_country - Montant net du pays de départ : :net_init