+ Add Request to make nano credit demand, join group and delete group
This commit is contained in:
parent
f9289f2228
commit
93a502257a
|
@ -7,6 +7,7 @@ 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;
|
||||
|
@ -36,6 +37,8 @@ class NanoCreditController extends Controller
|
|||
//
|
||||
}
|
||||
|
||||
// Gestion des groupes
|
||||
|
||||
public function createGroup(Request $request)
|
||||
{
|
||||
$group = new UsersGroup();
|
||||
|
@ -54,10 +57,20 @@ class NanoCreditController extends Controller
|
|||
if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt))
|
||||
return $this->errorResponse(trans('messages.incorrect_user_password'));
|
||||
|
||||
$this->checkMyIdentification($request->id_user);
|
||||
|
||||
//Verifier s'il appartient a un groupe
|
||||
if (isset($user->group_id))
|
||||
return $this->errorResponse(trans('errors.user_belongs_to_group'));
|
||||
|
||||
//Verifier s'il n'est pas sponsor
|
||||
if (in_array($user->user_code, [$request->code_sponsor1, $request->code_sponsor2, $request->code_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.cannot_be_sponsor'));
|
||||
|
||||
//Verifier l'unicite de chacun des trois sponsors
|
||||
if ($this->array_has_dupes([$request->code_sponsor1, $request->code_sponsor2, $request->code_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.sponsors_must_be_unique'));
|
||||
|
||||
$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')
|
||||
|
@ -103,8 +116,12 @@ class NanoCreditController extends Controller
|
|||
$group->date_creation = new \DateTime();
|
||||
$group->nombre_validation = 0;
|
||||
$group->actif = false;
|
||||
$group->valide = false;
|
||||
$group->nombre_utilisateurs = 1;
|
||||
$group->code_groupe = $this->getGroupID();
|
||||
$group->save();
|
||||
$user->group_id = $group->id;
|
||||
$user->date_adhesion = new \DateTime();
|
||||
$user->save();
|
||||
|
||||
$this->sendNotificationToSponsor($group->id, $group->id_sponsor1, $request->code_sponsor1, $user);
|
||||
$this->sendNotificationToSponsor($group->id, $group->id_sponsor2, $request->code_sponsor2, $user);
|
||||
|
@ -115,13 +132,26 @@ class NanoCreditController extends Controller
|
|||
}
|
||||
|
||||
public function validateGroupDemand(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'type' => 'required|in:creation,suppression',
|
||||
]);
|
||||
|
||||
if ($request->type == 'creation')
|
||||
return $this->validateGroupCreationDemand($request);
|
||||
if ($request->type == 'suppression')
|
||||
return $this->validateDeletingGroupDemand($request);
|
||||
}
|
||||
|
||||
|
||||
private function validateGroupCreationDemand(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'id_demande' => 'required|integer|min:0|not_in:0',
|
||||
'id_user' => 'required|integer|min:0|not_in:0'
|
||||
]);
|
||||
$demande = UsersGroupsDemandesValidation::findOrFail($request->id_demande);
|
||||
if ($demande->statut == 1)
|
||||
if ($demande->statut != 0)
|
||||
return $this->errorResponse(trans('errors.treated_group_demand'));
|
||||
|
||||
if ($demande->id_sponsor != $request->id_user)
|
||||
|
@ -129,26 +159,20 @@ class NanoCreditController extends Controller
|
|||
|
||||
$sponsor = User::findOrFail($request->id_user);
|
||||
$group = UsersGroup::findOrFail($demande->id_group);
|
||||
if (!in_array($demande->id_sponsor, [$group->id_sponsor1, $group->id_sponsor2, $group->id_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.not_group_sponsor'));
|
||||
|
||||
if ($group->actif)
|
||||
return $this->errorResponse(trans('errors.group_already_activated'));
|
||||
return $this->errorResponse(trans('errors.group_already_active'));
|
||||
|
||||
++$group->nombre_validation;
|
||||
++$group->nombre_utilisateurs;
|
||||
if ($group->nombre_validation == 3) {
|
||||
$group->actif = true;
|
||||
$group->date_activation = new \DateTime();
|
||||
$group->code_groupe = $this->getGroupID();
|
||||
$group->createur->group_id = $group->id;
|
||||
$group->sponsor1->group_id = $group->id;
|
||||
$group->sponsor2->group_id = $group->id;
|
||||
$group->sponsor3->group_id = $group->id;
|
||||
$group->createur->save();
|
||||
$group->sponsor1->save();
|
||||
$group->sponsor2->save();
|
||||
$group->sponsor3->save();
|
||||
}
|
||||
|
||||
$sponsor->group_id = $group->id;
|
||||
$sponsor->date_adhesion = new \DateTime();
|
||||
$sponsor->save();
|
||||
$group->save();
|
||||
$demande->statut = true;
|
||||
$demande->date_validation = new \DateTime();
|
||||
|
@ -165,6 +189,49 @@ class NanoCreditController extends Controller
|
|||
|
||||
}
|
||||
|
||||
public function cancelGroupDemand(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'id_demande' => 'required|integer|min:0|not_in:0',
|
||||
'id_user' => 'required|integer|min:0|not_in:0',
|
||||
'type' => 'required|in:creation,suppression',
|
||||
]);
|
||||
$demande = UsersGroupsDemandesValidation::findOrFail($request->id_demande);
|
||||
if ($demande->statut != 0)
|
||||
return $this->errorResponse(trans('errors.treated_group_demand'));
|
||||
|
||||
if ($demande->id_sponsor != $request->id_user)
|
||||
return $this->errorResponse(trans('errors.not_group_sponsor'));
|
||||
|
||||
|
||||
$sponsor = User::findOrFail($request->id_user);
|
||||
$group = UsersGroup::findOrFail($demande->id_group);
|
||||
|
||||
$demande->statut = 2;
|
||||
$demande->date_validation = new \DateTime();
|
||||
$demande->save();
|
||||
// Notififier le createur
|
||||
$data = new \stdClass();
|
||||
$data->screen = "notificationview";
|
||||
$data->data = new \stdClass();;
|
||||
$data->data->id = $request->id_demande;
|
||||
|
||||
if ($request->type == 'creation') {
|
||||
$this->sendPushNotificationToUser($group->createur->user_code,
|
||||
trans('notifications.refused_group_validation_request', ['name' => $sponsor->lastname . ' ' . $sponsor->firstname]), $data);
|
||||
|
||||
return $this->successResponse(trans('messages.successful_refused_group_validation'));
|
||||
}
|
||||
|
||||
if ($request->type == 'suppression') {
|
||||
$this->sendPushNotificationToUser($group->createur->user_code,
|
||||
trans('notifications.refused_group_deleting_request', ['name' => $sponsor->lastname . ' ' . $sponsor->firstname]), $data);
|
||||
|
||||
return $this->successResponse(trans('messages.successful_refused_group_deleting'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function updateGroup(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
|
@ -180,6 +247,14 @@ class NanoCreditController extends Controller
|
|||
if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt))
|
||||
return $this->errorResponse(trans('messages.incorrect_user_password'));
|
||||
|
||||
//Verifier s'il n'est pas sponsor
|
||||
if (in_array($user->user_code, [$request->code_sponsor1, $request->code_sponsor2, $request->code_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.cannot_be_sponsor'));
|
||||
|
||||
//Verifier l'unicite de chacun des trois sponsors
|
||||
if ($this->array_has_dupes([$request->code_sponsor1, $request->code_sponsor2, $request->code_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.sponsors_must_be_unique'));
|
||||
|
||||
$sponsor1 = User::where('user_code', $request->code_sponsor1)->firstOrFail();
|
||||
$sponsor2 = User::where('user_code', $request->code_sponsor2)->firstOrFail();
|
||||
$sponsor3 = User::where('user_code', $request->code_sponsor3)->firstOrFail();
|
||||
|
@ -257,22 +332,27 @@ class NanoCreditController extends Controller
|
|||
}
|
||||
|
||||
|
||||
public function sendNotificationToSponsor($id_group, $id_sponsor, $sponsor_code, User $sender)
|
||||
public function sendNotificationToSponsor($id_group, $id_sponsor, $sponsor_code, User $sender, $type = 'creation')
|
||||
{
|
||||
$demande = new UsersGroupsDemandesValidation();
|
||||
$demande->id_group = $id_group;
|
||||
$demande->id_sponsor = $id_sponsor;
|
||||
$demande->date_creation = new \DateTime();
|
||||
$demande->statut = false;
|
||||
$demande->type = $type;
|
||||
$demande->save();
|
||||
|
||||
$data = new \stdClass();
|
||||
$data->screen = "demandeValidationGroupe";
|
||||
$data->screen = $type == 'creation' ? "demandeValidationGroupe" : "demandeSuppressionGroupe";
|
||||
$data->data = new \stdClass();
|
||||
$data->data->id = $demande->id;
|
||||
|
||||
if ($type == 'creation')
|
||||
$this->sendPushNotificationToUser($sponsor_code,
|
||||
trans('notifications.group_validation_request', ['name' => $sender->lastname . ' ' . $sender->firstname]), $data);
|
||||
else
|
||||
$this->sendPushNotificationToUser($sponsor_code,
|
||||
trans('notifications.group_deleting_request', ['name' => $sender->lastname . ' ' . $sender->firstname]), $data);
|
||||
}
|
||||
|
||||
public function getGroupDemand($id_demand)
|
||||
|
@ -295,6 +375,111 @@ class NanoCreditController extends Controller
|
|||
return $this->successResponse($demands);
|
||||
}
|
||||
|
||||
public function joinGroup(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'code_groupe' => 'required',
|
||||
'code_sponsor' => 'required',
|
||||
'id_user' => 'required|integer|min:0|not_in:0'
|
||||
]);
|
||||
|
||||
$group = UsersGroup::where('code_groupe', $request->code_groupe)->firstOrFail();
|
||||
if (!$group->actif)
|
||||
return $this->errorResponse(trans('errors.group_not_active'));
|
||||
|
||||
$sponsor = User::where('user_code', $request->code_sponsor)->firstOrFail();
|
||||
if (!in_array($sponsor->id, [$group->id_sponsor1, $group->id_sponsor2, $group->id_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.not_group_sponsor'));
|
||||
|
||||
$user = User::findOrFail($request->id_user);
|
||||
if (isset($user->group_id))
|
||||
return $this->errorResponse(trans('errors.belongs_to_group'));
|
||||
|
||||
//Check user identification
|
||||
$country_sponsor = $sponsor->network->country->id;
|
||||
$country_user = $user->network->country->id;
|
||||
if ($country_user != $country_sponsor)
|
||||
return $this->errorResponse(trans('errors.not_registered_in_same_country'));
|
||||
|
||||
$this->checkMyIdentification($request->id_user);
|
||||
|
||||
$user->group_id = $group->id;
|
||||
$user->save();
|
||||
++$group->nombre_utilisateurs;
|
||||
$group->save();
|
||||
// Notifier les determinants
|
||||
return $this->successResponse(trans('messages.successful_group_adhesion'));
|
||||
|
||||
}
|
||||
|
||||
public function deleteGroup(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'code_groupe' => 'required',
|
||||
'id_user' => 'required|integer|min:0|not_in:0'
|
||||
]);
|
||||
|
||||
$group = UsersGroup::where('code_groupe', $request->code_groupe)->firstOrFail();
|
||||
if ($group->id_createur != $request->id_user)
|
||||
return $this->errorResponse(trans('errors.not_group_creator'));
|
||||
|
||||
$this->sendNotificationToSponsor($group->id, $group->id_sponsor1, $group->sponsor1->user_code, $group->createur, 'suppression');
|
||||
$this->sendNotificationToSponsor($group->id, $group->id_sponsor2, $group->sponsor2->user_code, $group->createur, 'suppression');
|
||||
$this->sendNotificationToSponsor($group->id, $group->id_sponsor3, $group->sponsor3->user_code, $group->createur, 'suppression');
|
||||
|
||||
return $this->successResponse(trans('messages.successful_user_group_deleted'));
|
||||
|
||||
}
|
||||
|
||||
private function validateDeletingGroupDemand(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'id_demande' => 'required|integer|min:0|not_in:0',
|
||||
'id_user' => 'required|integer|min:0|not_in:0'
|
||||
]);
|
||||
|
||||
$demande = UsersGroupsDemandesValidation::findOrFail($request->id_demande);
|
||||
if ($demande->statut != 0)
|
||||
return $this->errorResponse(trans('errors.treated_group_demand'));
|
||||
|
||||
if ($demande->id_sponsor != $request->id_user)
|
||||
return $this->errorResponse(trans('errors.not_group_sponsor'));
|
||||
|
||||
$sponsor = User::findOrFail($request->id_user);
|
||||
$group = UsersGroup::findOrFail($demande->id_group);
|
||||
if (!in_array($demande->id_sponsor, [$group->id_sponsor1, $group->id_sponsor2, $group->id_sponsor3]))
|
||||
return $this->errorResponse(trans('errors.not_group_sponsor'));
|
||||
|
||||
|
||||
++$group->nombre_suppression;
|
||||
if ($group->nombre_suppression == 3) {
|
||||
$group->actif = false;
|
||||
$group->nombre_validation = 0;
|
||||
$group->date_activation = null;
|
||||
$users = User::where('group_id', $group->id)->get();
|
||||
foreach ($users as $user) {
|
||||
$user->group_id = null;
|
||||
$user->date_adhesion = null;
|
||||
$user->save();
|
||||
}
|
||||
$group->deleted = true;
|
||||
}
|
||||
$group->save();
|
||||
$demande->statut = true;
|
||||
$demande->date_validation = new \DateTime();
|
||||
$demande->save();
|
||||
// Notififier le createur
|
||||
$data = new \stdClass();
|
||||
$data->screen = "notificationview";
|
||||
$data->data = new \stdClass();;
|
||||
$data->data->id = $request->id_demande;
|
||||
$this->sendPushNotificationToUser($group->createur->user_code,
|
||||
trans('notifications.accepted_group_deleting_request', ['name' => $sponsor->lastname . ' ' . $sponsor->firstname]), $data);
|
||||
|
||||
return $this->successResponse(trans_choice('messages.successful_group_deleting', 3 - $group->nombre_validation, ['count' => (3 - $group->nombre_validation)]));
|
||||
|
||||
}
|
||||
|
||||
private function checkSponsorIdentification($code_sponsor, $id, $init_country)
|
||||
{
|
||||
$sponsor = User::where('user_code', $code_sponsor)->first();
|
||||
|
@ -346,4 +531,150 @@ class NanoCreditController extends Controller
|
|||
return $randomString;
|
||||
}
|
||||
|
||||
private function checkMyIdentification($id)
|
||||
{
|
||||
$identification = Identification::where('id_user', $id)->first();
|
||||
if (isset($identification)) {
|
||||
if ($identification->status == 0)
|
||||
return $this->errorResponse(trans('errors.validation_identification_required'));
|
||||
} else {
|
||||
return $this->errorResponse(trans('errors.identification_required'));
|
||||
}
|
||||
}
|
||||
|
||||
// Gestion du nano credit
|
||||
|
||||
public function askNanoCredit(Request $request)
|
||||
{
|
||||
|
||||
$this->validate($request, [
|
||||
'type_caution' => 'required|in:groupe,individuel',
|
||||
'duree_mois' => 'required|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'));
|
||||
|
||||
$this->checkMyIdentification($request->id_user);
|
||||
|
||||
$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'));
|
||||
}
|
||||
|
||||
$taxes = array_values(array_filter($config->taxes->all(), function ($tax) {
|
||||
return $tax->categorie == 'nano_credit';
|
||||
}));
|
||||
|
||||
$paliers = array_values($config->paliers_config_nano_credits->all());
|
||||
|
||||
$demande_credit = new UsersDemandesCredit();
|
||||
$demande_credit->fill($request->all());
|
||||
|
||||
if ($request->type_caution == 'groupe') {
|
||||
|
||||
$group = UsersGroup::find($user->group_id);
|
||||
if (!$group)
|
||||
return $this->errorResponse(trans('errors.not_belongs_to_any_group'));
|
||||
|
||||
if (!$group->actif)
|
||||
return $this->errorResponse(trans('errors.your_group_not_active'));
|
||||
|
||||
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'));
|
||||
|
||||
|
||||
$walletUser = WalletsUser::where('idUser', $request->id_user)->firstOrFail();
|
||||
|
||||
$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->etat = 'VALIDE';
|
||||
$demande_credit->id_demande = $this->getNanoCreditDemandID();
|
||||
|
||||
$montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe;
|
||||
|
||||
$user->balance_credit += $montant_total;
|
||||
$walletUser->balance += $demande_credit->montant;
|
||||
$user->save();
|
||||
$walletUser->save();
|
||||
$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),
|
||||
'date' => $demande_credit->date_rembourssement]);
|
||||
$this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message);
|
||||
return $this->successResponse($message . trans('messages.sent_by_mail'));
|
||||
|
||||
}
|
||||
|
||||
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->etat = 'EN_ATTENTE_DE_VALIDATION';
|
||||
|
||||
$montant_total = $demande_credit->montant + $demande_credit->frais + $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),]);
|
||||
$this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message);
|
||||
return $this->successResponse($message . trans('messages.sent_by_mail'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Calculer les frais
|
||||
private function calculateFees(array $paliers, $montant, $duree)
|
||||
{
|
||||
$size = sizeof($paliers);
|
||||
if ($size > 0) {
|
||||
// $mois = array_map(function ($palier) {
|
||||
// return $palier->duree_mois;
|
||||
// },$paliers);
|
||||
|
||||
$palier = null;
|
||||
foreach ($paliers as $p) {
|
||||
if ($p->duree_mois == $duree) {
|
||||
$palier = $p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($palier) {
|
||||
return $palier->taux * $montant / 100;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private function getNanoCreditDemandID()
|
||||
{
|
||||
do {
|
||||
$code = $this->generateGroupCode();
|
||||
$result = collect(DB::select('SELECT * FROM users_demandes_credits WHERE id_demande = :code', ['code' => $code]));
|
||||
$codeCorrect = sizeof($result) < 0;
|
||||
} while ($codeCorrect);
|
||||
return $code;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -91,11 +91,11 @@ class iLinkTransactionController extends Controller
|
|||
$transaction->network_emetteur = $config->id_network;
|
||||
|
||||
$taxesNationales = array_values(array_filter($config->taxes->all(), function ($tax) {
|
||||
return $tax->destination == 'national';
|
||||
return $tax->destination == 'national' && $tax->categorie == 'wallet';
|
||||
}));
|
||||
|
||||
$taxesInternationales = array_values(array_filter($config->taxes->all(), function ($tax) {
|
||||
return $tax->destination == 'international';
|
||||
return $tax->destination == 'international' && $tax->categorie == 'wallet';
|
||||
}));
|
||||
|
||||
|
||||
|
@ -1269,21 +1269,6 @@ class iLinkTransactionController extends Controller
|
|||
}
|
||||
|
||||
|
||||
//Calcul des taxes
|
||||
private function calculateTax(array $taxes, $frais)
|
||||
{
|
||||
$sommeTaux = 0;
|
||||
$sommeFixe = 0;
|
||||
foreach ($taxes as $tax) {
|
||||
if ($tax->type == '%')
|
||||
$sommeTaux += $tax->valeur;
|
||||
|
||||
if ($tax->type == 'fixe')
|
||||
$sommeFixe += $tax->valeur;
|
||||
}
|
||||
return ($frais * $sommeTaux / 100) + $sommeFixe;
|
||||
}
|
||||
|
||||
private function random_string()
|
||||
{
|
||||
$character_set_array = array();
|
||||
|
|
|
@ -155,6 +155,11 @@ class ConfigWallet extends Model
|
|||
return $this->hasMany(PaliersConfigWallet::class, 'idConfig');
|
||||
}
|
||||
|
||||
public function paliers_config_nano_credits()
|
||||
{
|
||||
return $this->hasMany(PaliersConfigNanoCredit::class, 'idConfig');
|
||||
}
|
||||
|
||||
public function paying_networks()
|
||||
{
|
||||
return $this->hasMany(PayingNetwork::class, 'id_configWallet');
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Created by Reliese Model.
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class PaliersConfigNanoCredit
|
||||
*
|
||||
* @property int $id
|
||||
* @property int $duree_mois
|
||||
* @property float $taux
|
||||
* @property int $idConfig
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
class PaliersConfigNanoCredit extends Model
|
||||
{
|
||||
protected $table = 'paliersConfigNanoCredit';
|
||||
public $incrementing = false;
|
||||
public $timestamps = false;
|
||||
|
||||
protected $casts = [
|
||||
'id' => 'int',
|
||||
'duree_mois' => 'int',
|
||||
'taux' => 'float',
|
||||
'idConfig' => 'int'
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'duree_mois',
|
||||
'taux',
|
||||
'idConfig'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Created by Reliese Model.
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class UsersDemandesCredit
|
||||
*
|
||||
* @property int $id
|
||||
* @property string $id_demande
|
||||
* @property float $montant
|
||||
* @property int $duree_mois
|
||||
* @property string $type_caution
|
||||
* @property string $etat
|
||||
* @property float $frais
|
||||
* @property float $taxe
|
||||
* @property Carbon $date_demande
|
||||
* @property Carbon $date_rembourssement
|
||||
* @property int $id_user
|
||||
* @property int $id_agent
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
class UsersDemandesCredit extends Model
|
||||
{
|
||||
protected $table = 'users_demandes_credits';
|
||||
public $incrementing = false;
|
||||
public $timestamps = false;
|
||||
|
||||
protected $casts = [
|
||||
'id' => 'int',
|
||||
'montant' => 'float',
|
||||
'duree_mois' => 'int',
|
||||
'frais' => 'float',
|
||||
'taxe' => 'float',
|
||||
'id_user' => 'int',
|
||||
'id_agent' => 'int'
|
||||
];
|
||||
|
||||
protected $dates = [
|
||||
'date_demande',
|
||||
'date_rembourssement'
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'id_demande',
|
||||
'montant',
|
||||
'duree_mois',
|
||||
'type_caution',
|
||||
'etat',
|
||||
'frais',
|
||||
'taxe',
|
||||
'date_demande',
|
||||
'date_rembourssement',
|
||||
'id_user',
|
||||
'id_agent'
|
||||
];
|
||||
}
|
|
@ -21,10 +21,11 @@ use Illuminate\Database\Eloquent\Model;
|
|||
* @property int $id_sponsor3
|
||||
* @property int $nombre_validation
|
||||
* @property int $actif
|
||||
* @property int $valide
|
||||
* @property int $nombre_utilisateurs
|
||||
* @property int $id_createur
|
||||
* @property Carbon $date_creation
|
||||
* @property Carbon $date_activation
|
||||
* @property int deleted
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
|
@ -40,8 +41,9 @@ class UsersGroup extends Model
|
|||
'id_sponsor3' => 'int',
|
||||
'nombre_validation' => 'int',
|
||||
'actif' => 'int',
|
||||
'valide' => 'int',
|
||||
'id_createur' => 'int'
|
||||
'nombre_utilisateurs' => 'int',
|
||||
'id_createur' => 'int',
|
||||
'deleted' => 'int'
|
||||
];
|
||||
|
||||
protected $dates = [
|
||||
|
@ -58,10 +60,11 @@ class UsersGroup extends Model
|
|||
'id_sponsor3',
|
||||
'nombre_validation',
|
||||
'actif',
|
||||
'valide',
|
||||
'nombre_utilisateurs',
|
||||
'id_createur',
|
||||
'date_creation',
|
||||
'date_activation'
|
||||
'date_activation',
|
||||
'deleted'
|
||||
];
|
||||
|
||||
public function createur()
|
||||
|
|
|
@ -18,6 +18,7 @@ use Illuminate\Database\Eloquent\Model;
|
|||
* @property int $statut
|
||||
* @property Carbon $date_validation
|
||||
* @property Carbon $date_creation
|
||||
* @property string $type
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
|
@ -42,6 +43,7 @@ class UsersGroupsDemandesValidation extends Model
|
|||
'id_sponsor',
|
||||
'statut',
|
||||
'date_validation',
|
||||
'date_creation'
|
||||
'date_creation',
|
||||
'type'
|
||||
];
|
||||
}
|
||||
|
|
|
@ -183,4 +183,25 @@ trait Helper
|
|||
return new LengthAwarePaginator(array_slice($array, $offset, $perPage, true), count($array), $perPage, $page,
|
||||
['path' => $request->url(), 'query' => $request->query()]);
|
||||
}
|
||||
|
||||
public function array_has_dupes($array)
|
||||
{
|
||||
// streamline per @Felix
|
||||
return count($array) !== count(array_unique($array));
|
||||
}
|
||||
|
||||
//Calcul des taxes
|
||||
public function calculateTax(array $taxes, $frais)
|
||||
{
|
||||
$sommeTaux = 0;
|
||||
$sommeFixe = 0;
|
||||
foreach ($taxes as $tax) {
|
||||
if ($tax->type == '%')
|
||||
$sommeTaux += $tax->valeur;
|
||||
|
||||
if ($tax->type == 'fixe')
|
||||
$sommeFixe += $tax->valeur;
|
||||
}
|
||||
return ($frais * $sommeTaux / 100) + $sommeFixe;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ Paying network : :network :country',
|
|||
'sponsor_identification_required' => 'Sponsor :id identification is required to continue the operation',
|
||||
'validation_sponsor_identification_required' => 'Validation of sponsor :id identification is required to continue the operation',
|
||||
'not_group_sponsor' => 'You are not a sponsor of this group',
|
||||
'group_already_activated' => 'This group is already activated',
|
||||
'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',
|
||||
|
@ -37,4 +37,17 @@ Paying network : :network :country',
|
|||
'sponsor_not_found' => 'This sponsor :id code does not exist',
|
||||
'nano_credit_not_available' => 'Nano credit is not available in your country',
|
||||
'user_belongs_to_group' => 'You already belong to a group',
|
||||
'group_not_active' => 'This group is not active. Talk to your sponsor',
|
||||
'identification_required' => 'Your identification is required for this operation',
|
||||
'validation_identification_required' => 'Your identification must be validated in one of our points of sale',
|
||||
'belongs_to_group' => 'You already belong to a group',
|
||||
'not_registered_in_same_country' => 'You are not registered in the same country',
|
||||
'not_group_creator' => 'You are not the creator of this group',
|
||||
'cannot_be_sponsor' => 'You cannot be a sponsor of your group',
|
||||
'sponsors_must_be_unique' => "Each of the 3 sponsors must be unique",
|
||||
'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",
|
||||
|
||||
];
|
||||
|
|
|
@ -152,4 +152,29 @@ Your new identification has been taken into account. Contact an iLink World agen
|
|||
Regards,
|
||||
iLinkWorld team.',
|
||||
'successful_user_group_modificated' => 'The group has been modified successfully. Awaiting validation from new sponsors to activate it',
|
||||
'successful_group_adhesion' => 'Vous êtes désormais membre de ce groupe',
|
||||
'successful_user_group_deleted' => 'The group will be deleted after validation of the 3 sponsors',
|
||||
'successful_group_deleting' => 'Group deletion accepted. More than :count delete validation remaining | Group delete accepted. More than :count remaining delete validations',
|
||||
'successful_refused_group_validation' => 'Group validation refused',
|
||||
'successful_refused_group_deleting' => 'Group deletion refused',
|
||||
'successful_user_group_nano_credit_demand' => "Nanocredit application
|
||||
Request Information:
|
||||
- Request number: :id_demand
|
||||
- Type of deposit: Group
|
||||
- Credit amount: :amount
|
||||
- Fees: :fees
|
||||
- Net amount received: :net
|
||||
- Redemption date: :date
|
||||
|
||||
NB: The reimbursement process is automatic on the due date if the reimbursement is not initiated",
|
||||
'successful_nano_credit_demand' => 'Successful nano credit application',
|
||||
'successful_user_individual_nano_credit_demand' => "Nanocredit application
|
||||
Request Information:
|
||||
- Request number: :id_demand
|
||||
- Type of deposit: Individual
|
||||
- Credit amount: :amount
|
||||
- Fees: :fees
|
||||
- Net amount to be collected: :net
|
||||
|
||||
Go to a geolocated agent who agrees to back you up by validating your credit request",
|
||||
];
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?php
|
||||
return [
|
||||
"group_validation_request" => ":name has sent you a group validation request",
|
||||
"accepted_group_validation_request" => ":name has accepted your group validation request"
|
||||
"accepted_group_validation_request" => ":name has accepted your group validation request",
|
||||
"group_deleting_request" => ":name has sent you a group deleting request",
|
||||
"accepted_group_deleting_request" => ":name has accepted your group deleting request",
|
||||
"refused_group_validation_request" => ":name has refused your group validation request",
|
||||
"refused_group_deleting_request" => ":name has refused your group deleting request",
|
||||
];
|
||||
|
|
|
@ -28,7 +28,7 @@ Réseau payeur : :network :country',
|
|||
'sponsor_identification_required' => 'L\'identification du sponsor :id est requise pour continuer l\'operation',
|
||||
'validation_sponsor_identification_required' => 'La validation de l\'identification du sponsor :id est requise pour continuer l\'operation',
|
||||
'not_group_sponsor' => 'Vous n\'êtes pas un sponsor de ce groupe',
|
||||
'group_already_activated' => 'Ce groupe est déjà activé',
|
||||
'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',
|
||||
|
@ -37,4 +37,16 @@ Réseau payeur : :network :country',
|
|||
'sponsor_not_found' => 'Ce code sponsor :id n\'existe pas',
|
||||
'nano_credit_not_available' => 'Le nano credit n\'est pas disponible dans votre pays',
|
||||
'user_belongs_to_group' => 'Vous appartenez déjà à un groupe',
|
||||
'group_not_active' => 'Ce groupe est n\'est pas actif. Adressez-vous à votre sponsor',
|
||||
'identification_required' => 'Votre identification est requise pour cette opération',
|
||||
'validation_identification_required' => 'Votre identification doit être validée dans un de nos points de vente',
|
||||
'belongs_to_group' => 'Vous appartenez déjà à un groupe',
|
||||
'not_registered_in_same_country' => 'Vous n\'êtes pas enregistré dans le meme pays',
|
||||
'not_group_creator' => 'Vous n\'êtes pas le createur de ce groupe',
|
||||
'cannot_be_sponsor' => 'Vous ne pouvez pas être sponsor de votre groupe',
|
||||
'sponsors_must_be_unique' => "Chacun des 3 sponsors doit etre unique",
|
||||
'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",
|
||||
];
|
||||
|
|
|
@ -152,4 +152,29 @@ Votre nouvelle identification a bien été bien prise en compte. Rapprochez vous
|
|||
Cordialement,
|
||||
Equipe iLinkWorld.',
|
||||
'successful_user_group_modificated' => 'Le groupe a été modifié avec succes. En attente de validation des nouveaux sponsors pour l\'activer',
|
||||
'successful_group_adhesion' => 'Vous êtes désormais membre de ce groupe',
|
||||
'successful_user_group_deleted' => 'Le groupe sera supprimé après validation des 3 sponsors',
|
||||
'successful_group_deleting' => 'Suppression du groupe acceptée. Plus que :count validation de suppression restante|Suppression du groupe acceptée. Plus que :count validations de suppression restantes',
|
||||
'successful_refused_group_validation' => 'Validation du groupe refusée',
|
||||
'successful_refused_group_deleting' => 'Suppression du groupe refusée',
|
||||
'successful_user_group_nano_credit_demand' => "Demande de nano crédit
|
||||
Informations de la demande :
|
||||
- Numéro de la demande : :id_demand
|
||||
- Type de caution : Groupe
|
||||
- Montant du crédit : :amount
|
||||
- Frais : :fees
|
||||
- Montant net percu: :net
|
||||
- Date de remboursement : :date
|
||||
|
||||
NB: Le processus de remboursement est automatique à la date d'échéance si le remboursement n'est pas initié",
|
||||
'successful_nano_credit_demand' => 'Demande de nano crédit réussie',
|
||||
'successful_user_individual_nano_credit_demand' => "Demande de nano crédit
|
||||
Informations de la demande :
|
||||
- Numéro de la demande : :id_demand
|
||||
- Type de caution : Individuel
|
||||
- Montant du crédit : :amount
|
||||
- Frais : :fees
|
||||
- Montant net à percevoir : :net
|
||||
|
||||
Rendez vous chez un agent geolocalisé qui accepte de vous cautionner en validant votre demande de crédit",
|
||||
];
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?php
|
||||
return [
|
||||
"group_validation_request" => ":name vous a envoyé une demande de validation de groupe",
|
||||
"accepted_group_validation_request" => ":name a accepté votre demande de validation de groupe"
|
||||
"accepted_group_validation_request" => ":name a accepté votre demande de validation de groupe",
|
||||
"group_deleting_request" => ":name vous a envoyé une demande de suppression de groupe",
|
||||
"accepted_group_deleting_request" => ":name a accepté votre demande de suppression de groupe",
|
||||
"refused_group_deleting_request" => ":name a refusé votre demande de suppression de groupe",
|
||||
"refused_group_validation_request" => ":name a refusé votre demande de validation de groupe",
|
||||
];
|
||||
|
|
|
@ -73,6 +73,8 @@ $router->group(['prefix' => '/identifications'], function () use ($router) {
|
|||
$router->group(['prefix' => '/groups'], function () use ($router) {
|
||||
$router->post('', 'NanoCreditController@createGroup');
|
||||
$router->put('', 'NanoCreditController@updateGroup');
|
||||
$router->post('join', 'NanoCreditController@joinGroup');
|
||||
$router->delete('', 'NanoCreditController@deleteGroup');
|
||||
|
||||
// Demandes de validation
|
||||
$router->group(['prefix' => '/demands'], function () use ($router) {
|
||||
|
@ -80,5 +82,6 @@ $router->group(['prefix' => '/groups'], function () use ($router) {
|
|||
$router->get('all/{id_user}', 'NanoCreditController@getAllGroupDemand');
|
||||
$router->post('validate', 'NanoCreditController@validateGroupDemand');
|
||||
$router->post('cancel', 'NanoCreditController@cancelGroupDemand');
|
||||
$router->post('askNanoCredit', 'NanoCreditController@askNanoCredit');
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue