diff --git a/app/Http/Controllers/NanoCreditController.php b/app/Http/Controllers/NanoCreditController.php index e06e5e2..071aeef 100755 --- a/app/Http/Controllers/NanoCreditController.php +++ b/app/Http/Controllers/NanoCreditController.php @@ -2,25 +2,20 @@ namespace App\Http\Controllers; +use App\Models\AgentPlus; +use App\Models\CodeGenerer; use App\Models\ConfigWallet; -use App\Models\Identification; -use App\Models\Network; use App\Models\NetworksAgent; -use App\Models\TransfertCommissionTransaction; use App\Models\UsersDemandesCredit; use App\Models\UsersGroup; -use App\Models\UsersGroupsDemandesValidation; use App\Models\Wallet; +use App\Models\WalletAgent; use App\Models\WalletsUser; -use App\Models\WalletTransaction; use App\Traits\ApiResponser; use App\Traits\Helper; use Illuminate\Http\Request; use App\Models\User; -use Illuminate\Http\Response; -use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Mail; class NanoCreditController extends Controller { @@ -41,7 +36,6 @@ class NanoCreditController extends Controller public function askNanoCredit(Request $request) { - $this->validate($request, [ 'type_caution' => 'required|in:groupe,individuel', 'duree_mois' => 'required|integer|min:0|not_in:0', @@ -75,6 +69,11 @@ class NanoCreditController extends Controller $demande_credit = new UsersDemandesCredit(); $demande_credit->fill($request->all()); + // Derniere demande de nano credit + $last_demand = UsersDemandesCredit::where('id_user', $request->id_user)->where('etat', 'VALIDE')->first(); + if ($last_demand) + return $this->errorResponse(trans('errors.last_nano_credit_not_refunded')); + if ($request->type_caution == 'groupe') { $group = UsersGroup::find($user->group_id); @@ -96,7 +95,7 @@ class NanoCreditController extends Controller $demande_credit->frais = $this->calculateFees($paliers, $request->montant, $request->duree_mois); $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais); $demande_credit->date_demande = new \DateTime(); - $demande_credit->date_rembourssement = $demande_credit->date_demande->modify('+' . $request->duree_mois . ' month'); + $demande_credit->date_remboursement_prevu = $demande_credit->date_demande->modify('+' . $request->duree_mois . ' month'); $demande_credit->etat = 'VALIDE'; $demande_credit->id_demande = $this->getNanoCreditDemandID(); @@ -111,7 +110,7 @@ class NanoCreditController extends Controller $message = trans('messages.successful_user_group_nano_credit_demand', ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), 'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $init_country), - 'date' => $demande_credit->date_rembourssement]); + 'date' => $demande_credit->date_remboursement_prevu]); $this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message); return $this->successResponse($message . trans('messages.sent_by_mail')); @@ -138,6 +137,143 @@ class NanoCreditController extends Controller } + public function cautionnerCredit(Request $request) + { + $this->validate($request, [ + 'id_demande' => 'required', + 'id_wallet_agent' => 'required|integer|min:0|not_in:0', + 'password' => 'required', + ]); + + $walletAgent = Wallet::findOrFail($request->get('id_wallet_agent')); + $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); + $agent_country = $network_agent->network->country->id; + + // Recuperation des wallets hyperviseur et superviseur + $codeGenerer = CodeGenerer::findOrFail($network_agent->codeGenerer_id); + $superviseur = AgentPlus::where('code_membre', $codeGenerer->code_parrain)->firstOrFail(); + $hyperviseur = AgentPlus::where('code_membre', $superviseur->code_parrain)->firstOrFail(); + $wallet_agent_hyp = WalletAgent::where('agent_id', $hyperviseur->id)->firstOrFail(); + $walletHyperviseur = Wallet::findOrFail($wallet_agent_hyp->wallet_id); + + + $agent = AgentPlus::findOrFail($network_agent->agent_id); + if (!$this->checkPassword($request->password, $agent->encrypted_password, $agent->salt)) + return $this->errorResponse(trans('messages.incorrect_user_password')); + + $demande_credit = UsersDemandesCredit::where('id_demande', $request->id_demande)->first(); + if (!$demande_credit) + return $this->errorResponse(trans('errors.nano_credit_not_found')); + + if ($demande_credit->type_caution != 'individuel') + return $this->errorResponse(trans('errors.nano_credit_not_individual')); + + + if ($demande_credit->etat == 'VALIDE') + return $this->errorResponse(trans('messages.treated_demand')); + + $user = User::findOrFail($demande_credit->id_user); + $user_country = $user->network->country->id; + + if ($user_country != $agent_country) + return $this->errorResponse('errors.operation_cannot_performed_in_country'); + + $montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe; + + if ($montant_total > $walletAgent->balance_princ) + return $this->errorResponse(trans('errors.insufficient_balance')); + + + $demande_credit->date_demande = new \DateTime(); + $demande_credit->date_remboursement_prevu = $demande_credit->date_demande->modify('+' . $demande_credit->duree_mois . ' month'); + $demande_credit->etat = 'VALIDE'; + $demande_credit->id_wallet_agent = $walletAgent->id; + $user->balance_credit += $montant_total; + + $walletHyperviseur->balance_princ += $demande_credit->montant; + $walletAgent->balance_princ -= $montant_total; + $walletAgent->save(); + $walletHyperviseur->save(); + $user->save(); + + $demande_credit->save(); + + $user_message = trans('messages.successful_guarantee_user_individual_nano_credit_demand', + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), + 'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $agent_country), + 'date' => $demande_credit->date_remboursement_prevu, 'agent_name' => $agent->lastname . ' ' . $agent->firstname, 'code_agent' => $agent->code_membre]); + + $agent_message = trans('messages.successful_guarantee_agent_individual_nano_credit_demand', + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), + 'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $agent_country), + 'date' => $demande_credit->date_remboursement_prevu, 'user_name' => $user->lastname . ' ' . $user->firstname, 'code_user' => $user->user_code]); + + $this->sendMail($user->email, trans('messages.successful_guarantee_nano_credit_demand'), $user_message); + $this->sendMail($agent->email, trans('messages.successful_guarantee_nano_credit_demand'), $agent_message); + return $this->successResponse($agent_message . trans('messages.sent_by_mail')); + } + + public function rembourserCredit(Request $request) + { + $this->validate($request, [ + 'id_demande' => 'required', + 'id_user' => 'required|integer|min:0|not_in:0', + 'password' => 'required', + ]); + + $user = User::findOrFail($request->id_user); + if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt)) + return $this->errorResponse(trans('messages.incorrect_user_password')); + + $walletUser = WalletsUser::where('idUser', $request->id_user)->firstOrFail(); + $demande_credit = UsersDemandesCredit::where('id_demande', $request->id_demande)->first(); + if (!$demande_credit) + return $this->errorResponse(trans('errors.nano_credit_not_found')); + + if ($demande_credit->etat == 'REMBOURSE') + return $this->errorResponse(trans('errors.nano_credit_already_refunded')); + + $init_country = $user->network->country->id; + $montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe; + + if ($montant_total > $walletUser->balance) + return $this->errorResponse(trans('errors.insufficient_balance')); + + $user->balance_credit -= $montant_total; + $walletUser->balance -= $montant_total; + $demande_credit->etat = 'REMBOURSE'; + + if ($demande_credit->type_caution == 'individuel') { + $walletAgent = Wallet::findOrFail($demande_credit->id_wallet_agent); + $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); + + // Recuperation des wallets hyperviseur et superviseur + $codeGenerer = CodeGenerer::findOrFail($network_agent->codeGenerer_id); + $superviseur = AgentPlus::where('code_membre', $codeGenerer->code_parrain)->firstOrFail(); + $hyperviseur = AgentPlus::where('code_membre', $superviseur->code_parrain)->firstOrFail(); + $wallet_agent_hyp = WalletAgent::where('agent_id', $hyperviseur->id)->firstOrFail(); + $walletHyperviseur = Wallet::findOrFail($wallet_agent_hyp->wallet_id); + + $walletAgent->balance_princ += $demande_credit->montant; + $walletHyperviseur->balance_princ -= $demande_credit->montant; + $walletAgent->save(); + $walletHyperviseur->save(); + } + + $demande_credit->date_remboursement = new \DateTime(); + + $walletUser->save(); + $user->save(); + $demande_credit->save(); + + $message = trans('messages.successful_nano_credit_demand_refunded', + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), + 'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $init_country), + 'caution' => $demande_credit->type_caution == 'groupe' ? 'Groupe' : 'Individuel']); + $this->sendMail($user->email, trans('messages.successful_nano_credit_refunded'), $message); + return $this->successResponse($message . trans('messages.sent_by_mail')); + } + // Calculer les frais private function calculateFees(array $paliers, $montant, $duree) { diff --git a/app/Http/Controllers/UserGroupController.php b/app/Http/Controllers/UserGroupController.php index c98fb10..e599865 100755 --- a/app/Http/Controllers/UserGroupController.php +++ b/app/Http/Controllers/UserGroupController.php @@ -4,23 +4,14 @@ namespace App\Http\Controllers; use App\Models\ConfigWallet; use App\Models\Identification; -use App\Models\Network; -use App\Models\NetworksAgent; -use App\Models\TransfertCommissionTransaction; -use App\Models\UsersDemandesCredit; use App\Models\UsersGroup; use App\Models\UsersGroupsDemandesValidation; -use App\Models\Wallet; -use App\Models\WalletsUser; -use App\Models\WalletTransaction; use App\Traits\ApiResponser; use App\Traits\Helper; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Http\Response; -use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Mail; class UserGroupController extends Controller { @@ -361,7 +352,8 @@ class UserGroupController extends Controller public function getGroupDemand($id_demand) { - $demand = collect(DB::select('SELECT * FROM users_groups_demandes_validations ugd + $demand = collect(DB::select('SELECT ugd.* , ug.code_groupe , ug.nom , ug.limite_credit , ug.nombre_validation, ug.actif, ug.nombre_utilisateurs, +ug.date_creation , ug.createur , ug.sponsor1 , ug.sponsor2 , ug.sponsor3, ug.country, ug.currency_code FROM users_groups_demandes_validations ugd INNER JOIN infos_users_groups ug ON ug.id = ugd.id_group WHERE ugd.id = :id;', ['id' => $id_demand]))->first(); if ($demand) return $this->successResponse($demand); diff --git a/app/Models/UsersDemandesCredit.php b/app/Models/UsersDemandesCredit.php index 40f79e0..b6bef15 100644 --- a/app/Models/UsersDemandesCredit.php +++ b/app/Models/UsersDemandesCredit.php @@ -21,9 +21,10 @@ use Illuminate\Database\Eloquent\Model; * @property float $frais * @property float $taxe * @property Carbon $date_demande - * @property Carbon $date_rembourssement + * @property Carbon $date_remboursement_prevu + * @property Carbon $date_remboursement * @property int $id_user - * @property int $id_agent + * @property int $id_wallet_agent * * @package App\Models */ @@ -40,12 +41,13 @@ class UsersDemandesCredit extends Model 'frais' => 'float', 'taxe' => 'float', 'id_user' => 'int', - 'id_agent' => 'int' + 'id_wallet_agent' => 'int' ]; protected $dates = [ 'date_demande', - 'date_rembourssement' + 'date_remboursement_prevu', + 'date_remboursement' ]; protected $fillable = [ @@ -57,8 +59,9 @@ class UsersDemandesCredit extends Model 'frais', 'taxe', 'date_demande', - 'date_rembourssement', + 'date_remboursement_prevu', + 'date_remboursement', 'id_user', - 'id_agent' + 'id_wallet_agent' ]; } diff --git a/bootstrap/app.php b/bootstrap/app.php index e27fca4..9a58dfe 100755 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -61,6 +61,7 @@ $app->singleton( $app->configure('app'); $app->configure('mail'); +$app->configure('queue'); $app->alias('mailer', Illuminate\Mail\Mailer::class); $app->alias('mailer', Illuminate\Contracts\Mail\Mailer::class); $app->alias('mailer', Illuminate\Contracts\Mail\MailQueue::class); diff --git a/composer.lock b/composer.lock index fd2f53d..bf83d14 100755 --- a/composer.lock +++ b/composer.lock @@ -172,20 +172,20 @@ }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -230,7 +230,21 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "dragonmantank/cron-expression", @@ -3099,25 +3113,25 @@ }, { "name": "symfony/finder", - "version": "v5.0.7", + "version": "v5.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3144,7 +3158,21 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/http-foundation", @@ -3361,16 +3389,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.15.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -3382,7 +3410,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3415,7 +3447,21 @@ "polyfill", "portable" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-iconv", @@ -5087,6 +5133,7 @@ "keywords": [ "tokenizer" ], + "abandoned": true, "time": "2019-09-17T06:23:10+00:00" }, { diff --git a/config/queue.php b/config/queue.php new file mode 100755 index 0000000..00b76d6 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,89 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'your-queue-name'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index d12a50c..9539d43 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -49,5 +49,8 @@ Paying network : :network :country', 'your_group_not_active' => "Your group is not active. Talk to your sponsor", 'your_group_not_valid' => "Your group is not valid. Talk to your sponsor", 'nano_credit_amount_must_be_less_than_group_limit' => "The amount of credit requested must be less than or equal to the group credit limit", - + "nano_credit_not_found" => "This nano credit request does not exist", + "nano_credit_not_individual" => "This nano credit request is not individual", + "last_nano_credit_not_refunded" => "Your last nano credit request was not refunded", + "nano_credit_already_refunded" => "Repayment of credit already made" ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 48b2378..0a1d4c3 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -177,4 +177,28 @@ Request Information: - Net amount to be collected: :net Go to a geolocated agent who agrees to back you up by validating your credit request", + 'successful_guarantee_user_individual_nano_credit_demand' => "Guaranteed nanocredit request +Request Information: + - Request number: :id_demand + - Type of deposit: Individual + - Credit amount: :amount + - Fees: :fees + - Net amount received: :net + - Redemption date: :date + - Agent names: :agent_name + - Agent code: :code_agent", + 'successful_guarantee_agent_individual_nano_credit_demand' => "Guaranteed nanocredit request +Request Information: + - Request number: :id_demand + - Type of deposit: Individual + - Credit amount: :amount + - Fees: :fees + - Net amount received: :net + - Redemption date: :date + - Client names: :user_name + - Client code: :code_user + +NB: The reimbursement process is automatic on the due date if the reimbursement is not initiated", + 'successful_guarantee_nano_credit_demand' => 'Guaranteed nanocredit request', + 'successful_nano_credit_refunded' => 'Nano credit repayment made', ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 1029c54..2f77bac 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -49,4 +49,8 @@ Réseau payeur : :network :country', 'your_group_not_active' => "Votre groupe n'est pas actif. Adressez-vous à votre sponsor", 'your_group_not_valid' => "Votre groupe n'est pas valide. Adressez-vous à votre sponsor", 'nano_credit_amount_must_be_less_than_group_limit' => "Le montant du crédit demandé doit être inférieur ou égal à la limite crédit groupe", + "nano_credit_not_found" => "Cette demande de nano crédit n'existe pas", + "nano_credit_not_individual" => "Cette demande de nano crédit n'est pas individuelle", + "last_nano_credit_not_refunded" => "Votre derniere demande de nano crédit n'a pas été remboursée", + "nano_credit_already_refunded" => "Remboursement de crédit deja effectué" ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index be93582..56806e1 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -177,4 +177,35 @@ Informations de la demande : - Montant net à percevoir : :net Rendez vous chez un agent geolocalisé qui accepte de vous cautionner en validant votre demande de crédit", + 'successful_guarantee_user_individual_nano_credit_demand' => "Demande de nano crédit cautionnée +Informations de la demande : + - Numéro de la demande : :id_demand + - Type de caution : Individuel + - Montant du crédit : :amount + - Frais : :fees + - Montant net percu : :net + - Date de remboursement : :date + - Noms de l'agent : :agent_name + - Code de l'agent : :code_agent", + 'successful_guarantee_agent_individual_nano_credit_demand' => "Demande de nano crédit cautionnée +Informations de la demande : + - Numéro de la demande : :id_demand + - Type de caution : Individuel + - Montant du crédit : :amount + - Frais : :fees + - Montant net à percu : :net + - Date de remboursement : :date + - Noms du client : :user_name + - Code du client : :code_user + +NB: Le processus de remboursement est automatique à la date d'échéance si le remboursement n'est pas initié", + 'successful_guarantee_nano_credit_demand' => 'Demande de nano crédit cautionnée', + 'successful_nano_credit_refunded' => 'Remboursement de nano crédit effectué', + 'successful_nano_credit_demand_refunded' => "Nano crédit remboursé +Informations de la demande : + - Numéro de la demande : :id_demand + - Type de caution : :caution + - Montant du crédit : :amount + - Frais : :fees + - Montant net à percu : :net", ]; diff --git a/routes/web.php b/routes/web.php index eec1d45..147d2ab 100755 --- a/routes/web.php +++ b/routes/web.php @@ -83,5 +83,7 @@ $router->group(['prefix' => '/groups'], function () use ($router) { $router->post('validate', 'UserGroupController@validateGroupDemand'); $router->post('cancel', 'UserGroupController@cancelGroupDemand'); $router->post('askNanoCredit', 'NanoCreditController@askNanoCredit'); + $router->post('guaranteeNanoCredit', 'NanoCreditController@cautionnerCredit'); + $router->post('refundNanoCredit', 'NanoCreditController@rembourserCredit'); }); });