+ 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_PASSWORD=ilink2017GA
MAIL_FROM_ADDRESS=noreply@ilink-app.com MAIL_FROM_ADDRESS=noreply@ilink-app.com
MAIL_FROM_NAME="iLink World" MAIL_FROM_NAME="iLink World"
MAIL_ENCRYPTION=tls
VISA_API_URL=localhost:8082 VISA_API_URL=localhost:8082
VISA_API_USERNAME=admin VISA_API_USERNAME=admin

View File

@ -9,6 +9,7 @@ use App\Models\Identification;
use App\Models\InfosUsersGroup; use App\Models\InfosUsersGroup;
use App\Models\NetworksAgent; use App\Models\NetworksAgent;
use App\Models\UsersDemandesCredit; use App\Models\UsersDemandesCredit;
use App\Models\UsersEpargne;
use App\Models\UsersGroup; use App\Models\UsersGroup;
use App\Models\UsersGroupsDemandesValidation; use App\Models\UsersGroupsDemandesValidation;
use App\Models\Wallet; use App\Models\Wallet;
@ -18,6 +19,7 @@ use App\Traits\ApiResponser;
use App\Traits\Helper; use App\Traits\Helper;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class NanoCreditController extends Controller class NanoCreditController extends Controller
@ -97,21 +99,22 @@ class NanoCreditController extends Controller
if ($group->nombre_utilisateurs < 10) if ($group->nombre_utilisateurs < 10)
return $this->errorResponse(trans('errors.your_group_not_valid')); return $this->errorResponse(trans('errors.your_group_not_valid'));
if ($request->montant < $group->limite_credit) if ($request->montant > $group->limite_credit || $request->montant < $config->limite_credit_min)
return $this->errorResponse(trans('errors.nano_credit_amount_must_be_less_than_group_limit')); 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 //Verifier la capacité d'emprunt
$CE = $this->capaciteEmprunt($group->id); $CE = $this->capaciteEmprunt($group->id);
if ($CE < 0) 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) 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 //Verifier si le solde principal de l'hyperviseur est superieur au montant
$walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $config->id_network)->firstOrFail(); $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->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais); $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->interet);
$demande_credit->id_demande = $this->getNanoCreditDemandID(); $demande_credit->id_demande = $this->getNanoCreditDemandID();
if ($request->montant > $walletHyper->balance_princ) { if ($request->montant > $walletHyper->balance_princ) {
@ -124,12 +127,12 @@ class NanoCreditController extends Controller
$demande->id_demande = $demande_credit->id_demande; $demande->id_demande = $demande_credit->id_demande;
$demande->id_agent = $walletHyper->agent_id; $demande->id_agent = $walletHyper->agent_id;
$demande->date_creation = new \DateTime(); $demande->date_creation = new \DateTime();
$demande->statut = false;
$demande->type = 'nano_credit'; $demande->type = 'nano_credit';
$demande->save(); $demande->save();
$data = new \stdClass(); $data = new \stdClass();
$data->screen = "notificationview"; $data->screen = "notificationview";
$demande->statut = false;
$data->data = new \stdClass(); $data->data = new \stdClass();
$data->data->id = $demande->id; $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->date_remboursement_prevu = $demande_credit->date_demande->modify('+' . $request->duree_mois . ' month');
$demande_credit->etat = 'VALIDE'; $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; $user->balance_credit += $montant_total;
$walletUser->balance += $demande_credit->montant; $walletUser->balance += $demande_credit->montant;
@ -156,8 +159,8 @@ class NanoCreditController extends Controller
$demande_credit->save(); $demande_credit->save();
$message = trans('messages.successful_user_group_nano_credit_demand', $message = trans('messages.successful_user_group_nano_credit_demand',
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $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->frais + $demande_credit->taxe, $init_country), '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]); 'date' => $demande_credit->date_remboursement_prevu]);
$this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message); $this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail')); return $this->successResponse($message . trans('messages.sent_by_mail'));
@ -166,19 +169,19 @@ class NanoCreditController extends Controller
if ($request->type_caution == 'individuel') { if ($request->type_caution == 'individuel') {
$demande_credit->frais = $this->calculateFees($paliers, $request->montant, $request->duree_mois); $demande_credit->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois);
$demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais); $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->interet);
$demande_credit->etat = 'EN_ATTENTE_DE_VALIDATION'; $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->id_demande = $this->getNanoCreditDemandID();
$demande_credit->save(); $demande_credit->save();
$message = trans('messages.successful_user_individual_nano_credit_demand', $message = trans('messages.successful_user_individual_nano_credit_demand',
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country),
'net' => $this->toMoney($demande_credit->montant, $init_country), 'net' => $this->toMoney($demande_credit->montant, $init_country), 'duration' => $demande_credit->duree_mois,
'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $init_country),]); 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $init_country),]);
$this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message); $this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail')); return $this->successResponse($message . trans('messages.sent_by_mail'));
} }
@ -191,7 +194,8 @@ class NanoCreditController extends Controller
return $this->successResponse($demandes); return $this->successResponse($demandes);
} }
public function cautionnerCredit(Request $request) // Cautionner une demande de credit
public function guaranteeCredit(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'id_demande' => 'required', 'id_demande' => 'required',
@ -226,7 +230,7 @@ class NanoCreditController extends Controller
if ($user_country != $agent_country) if ($user_country != $agent_country)
return $this->errorResponse('errors.operation_cannot_performed_in_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) if ($montant_total > $walletAgent->balance_princ)
return $this->errorResponse(trans('errors.insufficient_balance')); return $this->errorResponse(trans('errors.insufficient_balance'));
@ -252,13 +256,13 @@ class NanoCreditController extends Controller
$demande_credit->save(); $demande_credit->save();
$user_message = trans('messages.successful_guarantee_user_individual_nano_credit_demand', $user_message = trans('messages.successful_guarantee_user_individual_nano_credit_demand',
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $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->frais + $demande_credit->taxe, $agent_country), '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]); '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', $agent_message = trans('messages.successful_guarantee_agent_individual_nano_credit_demand',
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $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->frais + $demande_credit->taxe, $agent_country), '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]); '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($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')); return $this->successResponse($agent_message . trans('messages.sent_by_mail'));
} }
public function rembourserCredit(Request $request) public function refundCredit(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'id_demande' => 'required', 'id_demande' => 'required',
@ -288,7 +292,7 @@ class NanoCreditController extends Controller
return $this->errorResponse(trans('errors.nano_credit_already_refunded')); return $this->errorResponse(trans('errors.nano_credit_already_refunded'));
$init_country = $user->network->country->id; $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) if ($montant_total > $walletUser->balance)
return $this->errorResponse(trans('errors.insufficient_balance')); return $this->errorResponse(trans('errors.insufficient_balance'));
@ -300,7 +304,8 @@ class NanoCreditController extends Controller
if ($demande_credit->type_caution == 'individuel') { if ($demande_credit->type_caution == 'individuel') {
$walletAgent = Wallet::findOrFail($demande_credit->id_wallet_agent); $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(); $walletAgent->save();
} }
@ -310,7 +315,8 @@ class NanoCreditController extends Controller
$walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $group->id_network)->firstOrFail(); $walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $group->id_network)->firstOrFail();
$walletHyper = Wallet::findOrFail($walletHyper->wallet_id); $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(); $walletHyper->save();
} }
@ -321,8 +327,8 @@ class NanoCreditController extends Controller
$demande_credit->save(); $demande_credit->save();
$message = trans('messages.successful_nano_credit_demand_refunded', $message = trans('messages.successful_nano_credit_demand_refunded',
['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $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->frais + $demande_credit->taxe, $init_country), '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']); 'caution' => $demande_credit->type_caution == 'groupe' ? 'Groupe' : 'Individuel']);
$this->sendMail($user->email, trans('messages.successful_nano_credit_refunded'), $message); $this->sendMail($user->email, trans('messages.successful_nano_credit_refunded'), $message);
return $this->successResponse($message . trans('messages.sent_by_mail')); return $this->successResponse($message . trans('messages.sent_by_mail'));
@ -342,7 +348,8 @@ class NanoCreditController extends Controller
return $sommeEpargnes - $sommeCredits; return $sommeEpargnes - $sommeCredits;
} }
public function getDureeMois($id_user) // Recuperer les durees en mois
public function getDurations($id_user)
{ {
$user = User::findOrFail($id_user); $user = User::findOrFail($id_user);
@ -372,7 +379,158 @@ class NanoCreditController extends Controller
return $this->successResponse($mois); 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) private function calculateFees(array $paliers, $montant, $duree)
{ {
$size = sizeof($paliers); $size = sizeof($paliers);
@ -402,4 +560,14 @@ class NanoCreditController extends Controller
return $code; 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) if (!$config->has_nano_credit)
return $this->errorResponse(trans('errors.nano_credit_not_available')); 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_max || $request->limite_credit < $config->limite_credit_min)
if ($request->limite_credit < $config->limite_credit_min) return $this->errorResponse(trans('errors.group_credit_limit_must_be_between',
return $this->errorResponse(trans('errors.credit_limit_is_less_than_min')); ['min_limit' => $this->toMoney($config->limite_credit_min, $init_country), 'max_limit' => $this->toMoney($config->limite_credit_max, $init_country)]));
$group->fill($request->all()); $group->fill($request->all());
// Envoyer des codes sponsors differents // Envoyer des codes sponsors differents

View File

@ -18,7 +18,7 @@ use Illuminate\Database\Eloquent\Model;
* @property int $duree_mois * @property int $duree_mois
* @property string $type_caution * @property string $type_caution
* @property string $etat * @property string $etat
* @property float $frais * @property float $interet
* @property float $taxe * @property float $taxe
* @property Carbon $date_demande * @property Carbon $date_demande
* @property Carbon $date_remboursement_prevu * @property Carbon $date_remboursement_prevu
@ -39,7 +39,7 @@ class UsersDemandesCredit extends Model
protected $casts = [ protected $casts = [
'montant' => 'float', 'montant' => 'float',
'duree_mois' => 'int', 'duree_mois' => 'int',
'frais' => 'float', 'interet' => 'float',
'taxe' => 'float', 'taxe' => 'float',
'id_user' => 'int', 'id_user' => 'int',
'id_wallet_agent' => 'int', 'id_wallet_agent' => 'int',
@ -60,7 +60,7 @@ class UsersDemandesCredit extends Model
'duree_mois', 'duree_mois',
'type_caution', 'type_caution',
'etat', 'etat',
'frais', 'interet',
'taxe', 'taxe',
'date_demande', 'date_demande',
'date_remboursement_prevu', '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', 'group_already_active' => 'This group is already active',
'sponsor_belongs_to_group' => 'Sponsor :id already belongs to a group', 'sponsor_belongs_to_group' => 'Sponsor :id already belongs to a group',
'treated_group_demand' => 'Group validation request already processed', 'treated_group_demand' => 'Group validation request already processed',
'credit_limit_is_greater_than_max' => 'The credit limit is greater than the maximum limit', 'group_credit_limit_must_be_between' => 'The credit limit must be between :min_limit and :max_limit',
'credit_limit_is_less_than_min' => 'The credit limit is lower than the minimum limit',
'sponsor_not_registered_in_same_country' => 'Sponsor :id is not registered in your country', 'sponsor_not_registered_in_same_country' => 'Sponsor :id is not registered in your country',
'sponsor_not_found' => 'This sponsor :id code does not exist', 'sponsor_not_found' => 'This sponsor :id code does not exist',
'nano_credit_not_available' => 'Nano credit is not available in your country', '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', '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_active' => "Your group is not active. Talk to your sponsor",
'your_group_not_valid' => "Your group is not valid. 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_found" => "This nano credit request does not exist",
"nano_credit_not_individual" => "This nano credit request is not individual", "nano_credit_not_individual" => "This nano credit request is not individual",
"last_nano_credit_not_refunded" => "Your last nano credit request was not refunded", "last_nano_credit_not_refunded" => "Your last nano credit request was not refunded",
"nano_credit_already_refunded" => "Repayment of credit already made", "nano_credit_already_refunded" => "Repayment of credit already made",
"sponsor_code_not_match" => "This sponsor code does not match to this group", "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", "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 - Request number: :id_demand
- Type of deposit: Group - Type of deposit: Group
- Credit amount: :amount - Credit amount: :amount
- Fees: :fees - Interests : :fees
- Net amount received: :net - Net amount received: :net
- Duration (in months) : :duration
- Redemption date: :date - Redemption date: :date
NB: The reimbursement process is automatic on the due date if the reimbursement is not initiated", 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 - Request number: :id_demand
- Type of deposit: Individual - Type of deposit: Individual
- Credit amount: :amount - Credit amount: :amount
- Fees: :fees - Interests : :fees
- Net amount to be collected: :net - 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", 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 'successful_guarantee_user_individual_nano_credit_demand' => "Guaranteed nanocredit request
@ -182,8 +184,9 @@ Request Information:
- Request number: :id_demand - Request number: :id_demand
- Type of deposit: Individual - Type of deposit: Individual
- Credit amount: :amount - Credit amount: :amount
- Fees: :fees - Interests : :fees
- Net amount received: :net - Net amount received: :net
- Duration (in months) : :duration
- Redemption date: :date - Redemption date: :date
- Agent names: :agent_name - Agent names: :agent_name
- Agent code: :code_agent", - Agent code: :code_agent",
@ -192,8 +195,9 @@ Request Information:
- Request number: :id_demand - Request number: :id_demand
- Type of deposit: Individual - Type of deposit: Individual
- Credit amount: :amount - Credit amount: :amount
- Fees: :fees - Interests : :fees
- Net amount received: :net - Net amount received: :net
- Duration (in months) : :duration
- Redemption date: :date - Redemption date: :date
- Client names: :user_name - Client names: :user_name
- Client code: :code_user - Client code: :code_user
@ -206,11 +210,29 @@ Request Information:
- Request number: :id_demand - Request number: :id_demand
- Type of deposit: :deposit - Type of deposit: :deposit
- Credit amount: :amount - Credit amount: :amount
- Fees: :fees - Interests : :fees
- Net amount received: :net", - Net amount received: :net",
'successful_accepted_group_membership_request' => "Membership request accepted", 'successful_accepted_group_membership_request' => "Membership request accepted",
'successful_canceled_group_membership_request' => "Membership request refused", '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_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_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', 'group_already_active' => 'Ce groupe est déjà actif',
'sponsor_belongs_to_group' => 'Sponsor :id appartient déjà à un groupe', 'sponsor_belongs_to_group' => 'Sponsor :id appartient déjà à un groupe',
'treated_group_demand' => 'Demande de validation de groupe déjà traitée', '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', 'group_credit_limit_must_be_between' => 'La limite de crédit doit être comprise entre :min_limit et :max_limit',
'credit_limit_is_less_than_min' => 'La limite de crédit est inférieure à la limite minimale',
'sponsor_not_registered_in_same_country' => 'Sponsor :id n\'est pas enregistré dans votre pays', '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', 'sponsor_not_found' => 'Ce code sponsor :id n\'existe pas',
'nano_credit_not_available' => 'Le nano credit n\'est pas disponible dans votre pays', '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", '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_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", '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_found" => "Cette demande de nano crédit n'existe pas",
"nano_credit_not_individual" => "Cette demande de nano crédit n'est pas individuelle", "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", "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é", "nano_credit_already_refunded" => "Remboursement de crédit deja effectué",
"sponsor_code_not_match" => "Ce code sponsor ne correspond pas à ce groupe", "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", "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 - Numéro de la demande : :id_demand
- Type de caution : Groupe - Type de caution : Groupe
- Montant du crédit : :amount - Montant du crédit : :amount
- Frais : :fees - Intérêts : :fees
- Montant net percu: :net - Montant net percu: :net
- Duréé (en mois) : :duration
- Date de remboursement : :date - Date de remboursement : :date
NB: Le processus de remboursement est automatique à la date d'échéance si le remboursement n'est pas initié", 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 - Numéro de la demande : :id_demand
- Type de caution : Individuel - Type de caution : Individuel
- Montant du crédit : :amount - Montant du crédit : :amount
- Frais : :fees - Intérêts : :fees
- Montant net à percevoir : :net - 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", 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 '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 - Numéro de la demande : :id_demand
- Type de caution : Individuel - Type de caution : Individuel
- Montant du crédit : :amount - Montant du crédit : :amount
- Frais : :fees - Intérêts : :fees
- Montant net percu : :net - Montant net percu : :net
- Duréé (en mois) : :duration
- Date de remboursement : :date - Date de remboursement : :date
- Noms de l'agent : :agent_name - Noms de l'agent : :agent_name
- Code de l'agent : :code_agent", - Code de l'agent : :code_agent",
@ -192,8 +195,9 @@ Informations de la demande :
- Numéro de la demande : :id_demand - Numéro de la demande : :id_demand
- Type de caution : Individuel - Type de caution : Individuel
- Montant du crédit : :amount - Montant du crédit : :amount
- Frais : :fees - Intérêts : :fees
- Montant net à percu : :net - Montant net à percu : :net
- Duréé (en mois) : :duration
- Date de remboursement : :date - Date de remboursement : :date
- Noms du client : :user_name - Noms du client : :user_name
- Code du client : :code_user - Code du client : :code_user
@ -207,10 +211,30 @@ Informations de la demande :
- Type de caution : :caution - Type de caution : :caution
- Montant du crédit : :amount - Montant du crédit : :amount
- Frais : :fees - Frais : :fees
- Montant net à percu : :net", - Montant net percu : :net",
'successful_accepted_group_membership_request' => "Demande d'adhésion acceptée", 'successful_accepted_group_membership_request' => "Demande d'adhésion acceptée",
'successful_canceled_group_membership_request' => "Demande d'adhésion refusé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_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_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 //Nano credit
$router->group(['prefix' => '/nanoCredit'], function () use ($router) { $router->group(['prefix' => '/nanoCredit'], function () use ($router) {
$router->post('ask', 'NanoCreditController@askNanoCredit'); $router->post('ask', 'NanoCreditController@askNanoCredit');
$router->post('guarantee', 'NanoCreditController@cautionnerCredit'); $router->post('guarantee', 'NanoCreditController@guaranteeCredit');
$router->post('refund', 'NanoCreditController@rembourserCredit'); $router->post('refund', 'NanoCreditController@refundCredit');
$router->get('durations/{id_user}', 'NanoCreditController@getDureeMois'); $router->get('durations/{id_user}', 'NanoCreditController@getDurations');
$router->get('demands/{id_user}', 'NanoCreditController@getNanoCreditsDemands'); $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');
});
}); });
}); });