diff --git a/app/Http/Controllers/NanoCreditController.php b/app/Http/Controllers/NanoCreditController.php index b8f4b4b..5277fe0 100755 --- a/app/Http/Controllers/NanoCreditController.php +++ b/app/Http/Controllers/NanoCreditController.php @@ -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; - $this->sendPushNotificationToUser($sponsor_code, - trans('notifications.group_validation_request', ['name' => $sender->lastname . ' ' . $sender->firstname]), $data); + 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; + } + } diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index 5e16c9f..fb69449 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -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(); diff --git a/app/Models/ConfigWallet.php b/app/Models/ConfigWallet.php index 77ad90f..17eade1 100755 --- a/app/Models/ConfigWallet.php +++ b/app/Models/ConfigWallet.php @@ -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'); diff --git a/app/Models/PaliersConfigNanoCredit.php b/app/Models/PaliersConfigNanoCredit.php new file mode 100644 index 0000000..b1114d4 --- /dev/null +++ b/app/Models/PaliersConfigNanoCredit.php @@ -0,0 +1,39 @@ + 'int', + 'duree_mois' => 'int', + 'taux' => 'float', + 'idConfig' => 'int' + ]; + + protected $fillable = [ + 'duree_mois', + 'taux', + 'idConfig' + ]; +} diff --git a/app/Models/UsersDemandesCredit.php b/app/Models/UsersDemandesCredit.php new file mode 100644 index 0000000..40f79e0 --- /dev/null +++ b/app/Models/UsersDemandesCredit.php @@ -0,0 +1,64 @@ + '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' + ]; +} diff --git a/app/Models/UsersGroup.php b/app/Models/UsersGroup.php index 8096ac4..7366ed6 100644 --- a/app/Models/UsersGroup.php +++ b/app/Models/UsersGroup.php @@ -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() diff --git a/app/Models/UsersGroupsDemandesValidation.php b/app/Models/UsersGroupsDemandesValidation.php index 68adf2f..3e22b8f 100644 --- a/app/Models/UsersGroupsDemandesValidation.php +++ b/app/Models/UsersGroupsDemandesValidation.php @@ -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' ]; } diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index 6822eab..e73440d 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -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; + } } diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 9d38b37..d12a50c 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -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", + ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 3d64707..48b2378 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -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", ]; diff --git a/resources/lang/en/notifications.php b/resources/lang/en/notifications.php index 7e0fe62..71a4f0c 100755 --- a/resources/lang/en/notifications.php +++ b/resources/lang/en/notifications.php @@ -1,5 +1,9 @@ ":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", ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index fa06d2c..1029c54 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -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", ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 664d8f0..be93582 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -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", ]; diff --git a/resources/lang/fr/notifications.php b/resources/lang/fr/notifications.php index 6c3ab50..77e7f71 100755 --- a/resources/lang/fr/notifications.php +++ b/resources/lang/fr/notifications.php @@ -1,5 +1,9 @@ ":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", ]; diff --git a/routes/web.php b/routes/web.php index ecbec2e..8d72d9c 100755 --- a/routes/web.php +++ b/routes/web.php @@ -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'); }); });