+ Make and Broke savings

This commit is contained in:
Djery-Tom 2020-08-31 14:54:10 +01:00
parent 93b5c34821
commit 06b5e9ef0d
10 changed files with 352 additions and 57 deletions

View File

@ -29,6 +29,7 @@ MAIL_USERNAME=noreply@ilink-app.com
MAIL_PASSWORD=ilink2017GA
MAIL_FROM_ADDRESS=noreply@ilink-app.com
MAIL_FROM_NAME="iLink World"
MAIL_ENCRYPTION=tls
VISA_API_URL=localhost:8082
VISA_API_USERNAME=admin

View File

@ -9,6 +9,7 @@ use App\Models\Identification;
use App\Models\InfosUsersGroup;
use App\Models\NetworksAgent;
use App\Models\UsersDemandesCredit;
use App\Models\UsersEpargne;
use App\Models\UsersGroup;
use App\Models\UsersGroupsDemandesValidation;
use App\Models\Wallet;
@ -18,6 +19,7 @@ use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB;
class NanoCreditController extends Controller
@ -97,21 +99,22 @@ class NanoCreditController extends Controller
if ($group->nombre_utilisateurs < 10)
return $this->errorResponse(trans('errors.your_group_not_valid'));
if ($request->montant < $group->limite_credit)
return $this->errorResponse(trans('errors.nano_credit_amount_must_be_less_than_group_limit'));
if ($request->montant > $group->limite_credit || $request->montant < $config->limite_credit_min)
return $this->errorResponse(trans('errors.nano_credit_amount_must_be_between_the_group_limit',
['min_limit' => $this->toMoney($config->limite_credit_min, $init_country), 'max_limit' => $this->toMoney($group->limite_credit, $init_country)]));
//Verifier la capacité d'emprunt
$CE = $this->capaciteEmprunt($group->id);
if ($CE < 0)
return $this->errorResponse("Le groupe n'a pas le droit d'emprenunter");
return $this->errorResponse(trans('errors.group_not_allow_to_borrow'));
if ($request->montant > $CE)
return $this->errorResponse("La capicite d'emprunt est dépassé");
return $this->errorResponse(trans('errors.borrowing_capacity_exceeded'));
//Verifier si le solde principal de l'hyperviseur est superieur au montant
$walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $config->id_network)->firstOrFail();
$demande_credit->frais = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais);
$demande_credit->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->interet);
$demande_credit->id_demande = $this->getNanoCreditDemandID();
if ($request->montant > $walletHyper->balance_princ) {
@ -124,12 +127,12 @@ class NanoCreditController extends Controller
$demande->id_demande = $demande_credit->id_demande;
$demande->id_agent = $walletHyper->agent_id;
$demande->date_creation = new \DateTime();
$demande->statut = false;
$demande->type = 'nano_credit';
$demande->save();
$data = new \stdClass();
$data->screen = "notificationview";
$demande->statut = false;
$data->data = new \stdClass();
$data->data->id = $demande->id;
@ -145,7 +148,7 @@ class NanoCreditController extends Controller
$demande_credit->date_remboursement_prevu = $demande_credit->date_demande->modify('+' . $request->duree_mois . ' month');
$demande_credit->etat = 'VALIDE';
$montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe;
$montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe;
$user->balance_credit += $montant_total;
$walletUser->balance += $demande_credit->montant;
@ -156,8 +159,8 @@ class NanoCreditController extends Controller
$demande_credit->save();
$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),
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), 'duration' => $demande_credit->duree_mois,
'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $init_country),
'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'));
@ -166,19 +169,19 @@ class NanoCreditController extends Controller
if ($request->type_caution == 'individuel') {
$demande_credit->frais = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais);
$demande_credit->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->interet);
$demande_credit->etat = 'EN_ATTENTE_DE_VALIDATION';
$montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe;
$montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe;
$demande_credit->id_demande = $this->getNanoCreditDemandID();
$demande_credit->save();
$message = trans('messages.successful_user_individual_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),]);
'net' => $this->toMoney($demande_credit->montant, $init_country), 'duration' => $demande_credit->duree_mois,
'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $init_country),]);
$this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail'));
}
@ -191,7 +194,8 @@ class NanoCreditController extends Controller
return $this->successResponse($demandes);
}
public function cautionnerCredit(Request $request)
// Cautionner une demande de credit
public function guaranteeCredit(Request $request)
{
$this->validate($request, [
'id_demande' => 'required',
@ -226,7 +230,7 @@ class NanoCreditController extends Controller
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;
$montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe;
if ($montant_total > $walletAgent->balance_princ)
return $this->errorResponse(trans('errors.insufficient_balance'));
@ -252,13 +256,13 @@ class NanoCreditController extends Controller
$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),
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), 'duration' => $demande_credit->duree_mois,
'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->interet + $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),
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), 'duration' => $demande_credit->duree_mois,
'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->interet + $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);
@ -266,7 +270,7 @@ class NanoCreditController extends Controller
return $this->successResponse($agent_message . trans('messages.sent_by_mail'));
}
public function rembourserCredit(Request $request)
public function refundCredit(Request $request)
{
$this->validate($request, [
'id_demande' => 'required',
@ -288,7 +292,7 @@ class NanoCreditController extends Controller
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;
$montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe;
if ($montant_total > $walletUser->balance)
return $this->errorResponse(trans('errors.insufficient_balance'));
@ -300,7 +304,8 @@ class NanoCreditController extends Controller
if ($demande_credit->type_caution == 'individuel') {
$walletAgent = Wallet::findOrFail($demande_credit->id_wallet_agent);
$walletAgent->balance_princ += $montant_total;
// Repartition des interet entre agents
// $walletHyper->balance_com += $demande_credit->interet;
$walletAgent->save();
}
@ -310,7 +315,8 @@ class NanoCreditController extends Controller
$walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $group->id_network)->firstOrFail();
$walletHyper = Wallet::findOrFail($walletHyper->wallet_id);
$walletHyper->balance_princ += $montant_total;
$walletHyper->balance_princ += $demande_credit->montant;
$walletHyper->balance_com += $demande_credit->interet;
$walletHyper->save();
}
@ -321,8 +327,8 @@ class NanoCreditController extends Controller
$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),
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), 'duration' => $demande_credit->duree_mois,
'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->interet + $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'));
@ -342,7 +348,8 @@ class NanoCreditController extends Controller
return $sommeEpargnes - $sommeCredits;
}
public function getDureeMois($id_user)
// Recuperer les durees en mois
public function getDurations($id_user)
{
$user = User::findOrFail($id_user);
@ -372,7 +379,158 @@ class NanoCreditController extends Controller
return $this->successResponse($mois);
}
// Calculer les frais
// Faire une epargne
public function makeSavings(Request $request)
{
$this->validate($request, [
'type' => 'required|in:simple,blocked',
'duree_mois' => 'required_if:type,blocked|integer|min:0|not_in:0',
'id_user' => 'required|integer|min:0|not_in:0',
'password' => 'required',
'montant' => 'required|numeric|min:0|not_in:0',
]);
$user = User::findOrFail($request->id_user);
if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt))
return $this->errorResponse(trans('messages.incorrect_user_password'));
$init_country = $user->network->country->id;
$result = ConfigWallet::join('networks', 'networks.id', '=', 'configWallet.id_network')
->where('networks.country_id', $init_country)->where('configWallet.type', 'ilink')
->select('configWallet.id')->first();
if ($result) {
$config = ConfigWallet::findOrFail($result->id);
} else {
return $this->errorResponse(trans('errors.no_ilink_network'));
}
if (!$config->has_nano_credit)
return $this->errorResponse(trans('errors.nano_credit_not_available'));
$saving = new UsersEpargne();
$saving->fill($request->all());
$saving->id_network = $config->id_network;
$sumFees = 0;
$saving->date_creation = new \DateTime();
if ($request->type == 'blocked') {
$taxes = array_values(array_filter($config->taxes->all(), function ($tax) {
return $tax->categorie == 'epargne';
}));
$paliers = array_values(array_filter($config->paliers_config_nano_credits->all(), function ($taux) {
return $taux->type == 'epargne';
}));
$saving->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$saving->taxe = $this->calculateTax($taxes, $saving->interet);
$saving->type = 'BLOQUE';
$saving->date_fin = $saving->date_creation->modify('+' . $request->duree_mois . ' month');
} else {
$saving->interet = 0;
$saving->taxe = 0;
$saving->type = 'SIMPLE';
}
$walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $config->id_network)->firstOrFail();
$walletHyper = Wallet::findOrFail($walletHyper->wallet_id);
$walletUser = WalletsUser::where('idUser', $request->id_user)->firstOrFail();
$montant_total = $saving->montant + $saving->interet - $saving->taxe;
if ($saving->montant > $walletUser->balance)
return $this->errorResponse(trans('errors.insufficient_balance'));
$saving->etat = 'EN_COURS';
$walletUser->balance -= $saving->montant;
$user->balance_epargne += $montant_total;
$walletHyper->balance_com -= ($saving->interet - $saving->taxe);
$saving->id_epargne = $this->getSavingID();
$walletHyper->save();
$walletUser->save();
$user->save();
$saving->save();
$message = trans('messages.successful_saving') . trans($request->type == 'blocked' ?
'messages.successful_blocked_saving_details' : 'messages.successful_simple_saving_details',
['id_saving' => $saving->id_epargne, 'amount' => $this->toMoney($montant_total, $init_country), 'type' => $saving->type,
'net' => $this->toMoney($saving->montant, $init_country), 'fees' => $this->toMoney($saving->interet - $saving->taxe, $init_country),
'date' => $saving->date_fin, 'duration' => $saving->duree_mois]);
$this->sendMail($user->email, trans('messages.successful_saving'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail'));
}
// Casser une epargne
public function breakSavings(Request $request)
{
$this->validate($request, [
'id_epargne' => 'required',
'id_user' => 'required|integer|min:0|not_in:0',
]);
$saving = UsersEpargne::where('id_epargne', $request->id_epargne)->firstOrFail();
if ($saving->id_user != $request->id_user)
return $this->errorResponse(trans('errors.not_authorized_to_process_request'));
if ($saving->etat == 'CASSE')
return $this->errorResponse(trans('errors.savings_already_broken'));
$user = User::findOrFail($request->id_user);
$init_country = $user->network->country->id;
$walletUser = WalletsUser::where('idUser', $request->id_user)->firstOrFail();
if ($saving->type == 'BLOQUE') {
$montant_total = $saving->montant + $saving->interet - $saving->taxe;
} else {
$montant_total = $saving->montant;
}
$user->balance_epargne -= $montant_total;
$walletUser->balance += $montant_total;
$saving->etat = 'CASSE';
$saving->date_cassation = new \DateTime();
$user->save();
$walletUser->save();
$saving->save();
$message = trans('messages.successful_broken_saving') . trans($saving->type == 'BLOQUE' ?
'messages.successful_blocked_saving_details' : 'messages.successful_simple_saving_details',
['id_saving' => $saving->id_epargne, 'amount' => $this->toMoney($montant_total, $init_country), 'type' => $saving->type,
'net' => $this->toMoney($saving->montant, $init_country), 'fees' => $this->toMoney($saving->interet - $saving->taxe, $init_country),
'date' => $saving->date_fin, 'duration' => $saving->duree_mois]);
$this->sendMail($user->email, trans('messages.successful_broken_saving'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail'));
}
public function getInfosNanoCredit($id_demand)
{
$demand = UsersDemandesCredit::where('id_demande', $id_demand)->first();
if ($demand) {
return $this->successResponse($demand);
} else {
return $this->errorResponse(trans('errors.nano_credit_not_found'));
}
}
public function getInfosSavings($id_saving)
{
$demand = UsersEpargne::where('id_epargne', $id_saving)->first();
if ($demand) {
return $this->successResponse($demand);
} else {
return $this->errorResponse(trans('errors.savings_not_found'));
}
}
// Calculer les interet
private function calculateFees(array $paliers, $montant, $duree)
{
$size = sizeof($paliers);
@ -402,4 +560,14 @@ class NanoCreditController extends Controller
return $code;
}
private function getSavingID()
{
do {
$code = $this->generateGroupCode();
$result = collect(DB::select('SELECT * FROM users_epargnes WHERE id_epargne = :code', ['code' => $code]));
$codeCorrect = sizeof($result) < 0;
} while ($codeCorrect);
return $code;
}
}

View File

@ -80,10 +80,10 @@ class UserGroupController extends Controller
if (!$config->has_nano_credit)
return $this->errorResponse(trans('errors.nano_credit_not_available'));
if ($request->limite_credit > $config->limite_credit_max)
return $this->errorResponse(trans('errors.credit_limit_is_greater_than_max'));
if ($request->limite_credit < $config->limite_credit_min)
return $this->errorResponse(trans('errors.credit_limit_is_less_than_min'));
if ($request->limite_credit > $config->limite_credit_max || $request->limite_credit < $config->limite_credit_min)
return $this->errorResponse(trans('errors.group_credit_limit_must_be_between',
['min_limit' => $this->toMoney($config->limite_credit_min, $init_country), 'max_limit' => $this->toMoney($config->limite_credit_max, $init_country)]));
$group->fill($request->all());
// Envoyer des codes sponsors differents

View File

@ -18,7 +18,7 @@ use Illuminate\Database\Eloquent\Model;
* @property int $duree_mois
* @property string $type_caution
* @property string $etat
* @property float $frais
* @property float $interet
* @property float $taxe
* @property Carbon $date_demande
* @property Carbon $date_remboursement_prevu
@ -39,7 +39,7 @@ class UsersDemandesCredit extends Model
protected $casts = [
'montant' => 'float',
'duree_mois' => 'int',
'frais' => 'float',
'interet' => 'float',
'taxe' => 'float',
'id_user' => 'int',
'id_wallet_agent' => 'int',
@ -60,7 +60,7 @@ class UsersDemandesCredit extends Model
'duree_mois',
'type_caution',
'etat',
'frais',
'interet',
'taxe',
'date_demande',
'date_remboursement_prevu',

View File

@ -0,0 +1,65 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class UsersEpargne
*
* @property int $id
* @property string $id_epargne
* @property string $type
* @property float $montant
* @property int $duree_mois
* @property float $interet
* @property float $taxe
* @property Carbon $date_creation
* @property Carbon $date_fin
* @property Carbon $date_cassation
* @property string $etat
* @property int $id_user
* @property int $id_network
*
* @package App\Models
*/
class UsersEpargne extends Model
{
protected $table = 'users_epargnes';
public $timestamps = false;
protected $casts = [
'montant' => 'float',
'duree_mois' => 'int',
'interet' => 'float',
'taxe' => 'float',
'id_user' => 'int',
'id_network' => 'int'
];
protected $dates = [
'date_creation',
'date_fin',
'date_cassation'
];
protected $fillable = [
'id_epargne',
'type',
'montant',
'duree_mois',
'interet',
'taxe',
'date_creation',
'date_fin',
'date_cassation',
'etat',
'id_user',
'id_network'
];
}

View File

@ -31,8 +31,7 @@ Paying network : :network :country',
'group_already_active' => 'This group is already active',
'sponsor_belongs_to_group' => 'Sponsor :id already belongs to a group',
'treated_group_demand' => 'Group validation request already processed',
'credit_limit_is_greater_than_max' => 'The credit limit is greater than the maximum limit',
'credit_limit_is_less_than_min' => 'The credit limit is lower than the minimum limit',
'group_credit_limit_must_be_between' => 'The credit limit must be between :min_limit and :max_limit',
'sponsor_not_registered_in_same_country' => 'Sponsor :id is not registered in your country',
'sponsor_not_found' => 'This sponsor :id code does not exist',
'nano_credit_not_available' => 'Nano credit is not available in your country',
@ -48,11 +47,16 @@ Paying network : :network :country',
'not_belongs_to_any_group' => 'You do not belong to any group',
'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_amount_must_be_between_the_group_limit' => "The amount of credit requested must be between :min_limit and :max_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",
"sponsor_code_not_match" => "This sponsor code does not match to this group",
"user_already_member_of_group" => "This user is already a member of a group",
"not_authorized_to_process_request" => "You are not authorized to process this request",
"savings_already_broken" => "Savings already broken",
"group_not_allow_to_borrow" => "The group is not allowed to borrow",
"borrowing_capacity_exceeded" => "The borrowing capacity is exceeded",
"savings_not_found" => "This savings does not exist"
];

View File

@ -162,8 +162,9 @@ Request Information:
- Request number: :id_demand
- Type of deposit: Group
- Credit amount: :amount
- Fees: :fees
- Interests : :fees
- Net amount received: :net
- Duration (in months) : :duration
- Redemption date: :date
NB: The reimbursement process is automatic on the due date if the reimbursement is not initiated",
@ -173,8 +174,9 @@ Request Information:
- Request number: :id_demand
- Type of deposit: Individual
- Credit amount: :amount
- Fees: :fees
- Interests : :fees
- Net amount to be collected: :net
- Duration (in months) : :duration
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
@ -182,8 +184,9 @@ Request Information:
- Request number: :id_demand
- Type of deposit: Individual
- Credit amount: :amount
- Fees: :fees
- Interests : :fees
- Net amount received: :net
- Duration (in months) : :duration
- Redemption date: :date
- Agent names: :agent_name
- Agent code: :code_agent",
@ -192,8 +195,9 @@ Request Information:
- Request number: :id_demand
- Type of deposit: Individual
- Credit amount: :amount
- Fees: :fees
- Interests : :fees
- Net amount received: :net
- Duration (in months) : :duration
- Redemption date: :date
- Client names: :user_name
- Client code: :code_user
@ -206,11 +210,29 @@ Request Information:
- Request number: :id_demand
- Type of deposit: :deposit
- Credit amount: :amount
- Fees: :fees
- Interests : :fees
- Net amount received: :net",
'successful_accepted_group_membership_request' => "Membership request accepted",
'successful_canceled_group_membership_request' => "Membership request refused",
'successful_nano_credit_sent_to_hypervisor' => "Your request has been sent to your network hypervisor. You will receive the credit only after validation",
'successful_accepted_nano_credit_request' => "Nano credit request accepted",
'successful_canceled_nano_credit_request' => "Nano credit request refused"
'successful_canceled_nano_credit_request' => "Nano credit request refused",
"successful_saving" => "Successful savings",
"successful_blocked_saving_details" => "
Savings Information :
- Savings number : :id_saving
- Type : :type
- Amount at cassation : :amount
- Interests : :fees
- Net amount saved : :net
- Duration (in months) : :duration
- End date : :date",
"successful_simple_saving_details" => "
Savings Information :
- Savings number : :id_saving
- Type : :type
- Amount at cassation : :amount
- Interests : :fees
- Net amount saved : :net",
"successful_broken_saving" => "Broken savings",
];

View File

@ -31,8 +31,7 @@ Réseau payeur : :network :country',
'group_already_active' => 'Ce groupe est déjà actif',
'sponsor_belongs_to_group' => 'Sponsor :id appartient déjà à un groupe',
'treated_group_demand' => 'Demande de validation de groupe déjà traitée',
'credit_limit_is_greater_than_max' => 'La limite de crédit est supérieur à la limite maximale',
'credit_limit_is_less_than_min' => 'La limite de crédit est inférieure à la limite minimale',
'group_credit_limit_must_be_between' => 'La limite de crédit doit être comprise entre :min_limit et :max_limit',
'sponsor_not_registered_in_same_country' => 'Sponsor :id n\'est pas enregistré dans votre pays',
'sponsor_not_found' => 'Ce code sponsor :id n\'existe pas',
'nano_credit_not_available' => 'Le nano credit n\'est pas disponible dans votre pays',
@ -48,11 +47,16 @@ Réseau payeur : :network :country',
'not_belongs_to_any_group' => "Vous n'appartennez à aucun groupe",
'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_amount_must_be_between_the_group_limit' => "Le montant du crédit demandé doit être compris entre :min_limit et :max_limit",
"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é",
"sponsor_code_not_match" => "Ce code sponsor ne correspond pas à ce groupe",
"user_already_member_of_group" => "Cet utilisateur est déjà membre d'un groupe",
"not_authorized_to_process_request" => "Vous n'êtes pas autorisé à traiter cette requête",
"savings_already_broken" => "Épargne déjà cassée",
"group_not_allow_to_borrow" => "Le groupe n'a pas le droit d'emprunter",
"borrowing_capacity_exceeded" => "La capacité d'emprunt est dépassée",
"savings_not_found" => "Cette épargne n'existe pas"
];

View File

@ -162,8 +162,9 @@ Informations de la demande :
- Numéro de la demande : :id_demand
- Type de caution : Groupe
- Montant du crédit : :amount
- Frais : :fees
- Intérêts : :fees
- Montant net percu: :net
- Duréé (en mois) : :duration
- Date de remboursement : :date
NB: Le processus de remboursement est automatique à la date d'échéance si le remboursement n'est pas initié",
@ -173,8 +174,9 @@ Informations de la demande :
- Numéro de la demande : :id_demand
- Type de caution : Individuel
- Montant du crédit : :amount
- Frais : :fees
- Intérêts : :fees
- Montant net à percevoir : :net
- Duréé (en mois) : :duration
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
@ -182,8 +184,9 @@ Informations de la demande :
- Numéro de la demande : :id_demand
- Type de caution : Individuel
- Montant du crédit : :amount
- Frais : :fees
- Intérêts : :fees
- Montant net percu : :net
- Duréé (en mois) : :duration
- Date de remboursement : :date
- Noms de l'agent : :agent_name
- Code de l'agent : :code_agent",
@ -192,8 +195,9 @@ Informations de la demande :
- Numéro de la demande : :id_demand
- Type de caution : Individuel
- Montant du crédit : :amount
- Frais : :fees
- Intérêts : :fees
- Montant net à percu : :net
- Duréé (en mois) : :duration
- Date de remboursement : :date
- Noms du client : :user_name
- Code du client : :code_user
@ -207,10 +211,30 @@ Informations de la demande :
- Type de caution : :caution
- Montant du crédit : :amount
- Frais : :fees
- Montant net à percu : :net",
- Montant net percu : :net",
'successful_accepted_group_membership_request' => "Demande d'adhésion acceptée",
'successful_canceled_group_membership_request' => "Demande d'adhésion refusée",
'successful_nano_credit_sent_to_hypervisor' => "Votre demande a été envoyé à l'hyperviseur de votre reseau. Vous recevrez le credit seulement après validation",
'successful_accepted_nano_credit_request' => "Demande de nano credit acceptée",
'successful_canceled_nano_credit_request' => "Demande de nano credit refusée"
'successful_canceled_nano_credit_request' => "Demande de nano credit refusée",
"successful_saving" => "Epargne réussie",
"successful_blocked_saving_details" => "
Informations sur l'epargne :
- Numéro de l'epargne : :id_saving
- Type : :type
- Montant lors de la cassation : :amount
- Intérêts : :fees
- Montant net epargné : :net
- Duréé (en mois) : :duration
- Date de fin : :date
",
"successful_simple_saving_details" => "
Informations sur l'epargne :
- Numéro de l'epargne : :id_saving
- Type : :type
- Montant lors de la cassation : :amount
- Intérêts : :fees
- Montant net epargné : :net
",
"successful_broken_saving" => "Epargne cassée",
];

View File

@ -89,9 +89,16 @@ $router->group(['prefix' => '/groups'], function () use ($router) {
//Nano credit
$router->group(['prefix' => '/nanoCredit'], function () use ($router) {
$router->post('ask', 'NanoCreditController@askNanoCredit');
$router->post('guarantee', 'NanoCreditController@cautionnerCredit');
$router->post('refund', 'NanoCreditController@rembourserCredit');
$router->get('durations/{id_user}', 'NanoCreditController@getDureeMois');
$router->post('guarantee', 'NanoCreditController@guaranteeCredit');
$router->post('refund', 'NanoCreditController@refundCredit');
$router->get('durations/{id_user}', 'NanoCreditController@getDurations');
$router->get('demands/{id_user}', 'NanoCreditController@getNanoCreditsDemands');
$router->get('details/{id_demand}', 'NanoCreditController@getInfosNanoCredit');
$router->group(['prefix' => '/savings'], function () use ($router) {
$router->post('make', 'NanoCreditController@makeSavings');
$router->post('break', 'NanoCreditController@breakSavings');
$router->get('details/{id_saving}', 'NanoCreditController@getInfosSavings');
});
});
});