diff --git a/.env.example b/.env.example index 434a693..b0c5a64 100755 --- a/.env.example +++ b/.env.example @@ -29,6 +29,7 @@ MAIL_USERNAME=noreply@ilink-app.com MAIL_PASSWORD=ilink2017GA MAIL_FROM_ADDRESS=noreply@ilink-app.com MAIL_FROM_NAME="iLink World" +MAIL_ENCRYPTION=tls VISA_API_URL=localhost:8082 VISA_API_USERNAME=admin diff --git a/app/Http/Controllers/NanoCreditController.php b/app/Http/Controllers/NanoCreditController.php index a6bd3ee..dec565b 100755 --- a/app/Http/Controllers/NanoCreditController.php +++ b/app/Http/Controllers/NanoCreditController.php @@ -9,6 +9,7 @@ use App\Models\Identification; use App\Models\InfosUsersGroup; use App\Models\NetworksAgent; use App\Models\UsersDemandesCredit; +use App\Models\UsersEpargne; use App\Models\UsersGroup; use App\Models\UsersGroupsDemandesValidation; use App\Models\Wallet; @@ -18,6 +19,7 @@ use App\Traits\ApiResponser; use App\Traits\Helper; use Illuminate\Http\Request; use App\Models\User; +use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\DB; class NanoCreditController extends Controller @@ -97,21 +99,22 @@ class NanoCreditController extends Controller if ($group->nombre_utilisateurs < 10) return $this->errorResponse(trans('errors.your_group_not_valid')); - if ($request->montant < $group->limite_credit) - return $this->errorResponse(trans('errors.nano_credit_amount_must_be_less_than_group_limit')); + if ($request->montant > $group->limite_credit || $request->montant < $config->limite_credit_min) + return $this->errorResponse(trans('errors.nano_credit_amount_must_be_between_the_group_limit', + ['min_limit' => $this->toMoney($config->limite_credit_min, $init_country), 'max_limit' => $this->toMoney($group->limite_credit, $init_country)])); //Verifier la capacité d'emprunt $CE = $this->capaciteEmprunt($group->id); if ($CE < 0) - return $this->errorResponse("Le groupe n'a pas le droit d'emprenunter"); + return $this->errorResponse(trans('errors.group_not_allow_to_borrow')); if ($request->montant > $CE) - return $this->errorResponse("La capicite d'emprunt est dépassé"); + return $this->errorResponse(trans('errors.borrowing_capacity_exceeded')); //Verifier si le solde principal de l'hyperviseur est superieur au montant $walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $config->id_network)->firstOrFail(); - $demande_credit->frais = $this->calculateFees($paliers, $request->montant, $request->duree_mois); - $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais); + $demande_credit->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois); + $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->interet); $demande_credit->id_demande = $this->getNanoCreditDemandID(); if ($request->montant > $walletHyper->balance_princ) { @@ -124,12 +127,12 @@ class NanoCreditController extends Controller $demande->id_demande = $demande_credit->id_demande; $demande->id_agent = $walletHyper->agent_id; $demande->date_creation = new \DateTime(); - $demande->statut = false; $demande->type = 'nano_credit'; $demande->save(); $data = new \stdClass(); $data->screen = "notificationview"; + $demande->statut = false; $data->data = new \stdClass(); $data->data->id = $demande->id; @@ -145,7 +148,7 @@ class NanoCreditController extends Controller $demande_credit->date_remboursement_prevu = $demande_credit->date_demande->modify('+' . $request->duree_mois . ' month'); $demande_credit->etat = 'VALIDE'; - $montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe; + $montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe; $user->balance_credit += $montant_total; $walletUser->balance += $demande_credit->montant; @@ -156,8 +159,8 @@ class NanoCreditController extends Controller $demande_credit->save(); $message = trans('messages.successful_user_group_nano_credit_demand', - ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), - 'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $init_country), + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), 'duration' => $demande_credit->duree_mois, + 'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $init_country), 'date' => $demande_credit->date_remboursement_prevu]); $this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message); return $this->successResponse($message . trans('messages.sent_by_mail')); @@ -166,19 +169,19 @@ class NanoCreditController extends Controller if ($request->type_caution == 'individuel') { - $demande_credit->frais = $this->calculateFees($paliers, $request->montant, $request->duree_mois); - $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->frais); + $demande_credit->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois); + $demande_credit->taxe = $this->calculateTax($taxes, $demande_credit->interet); $demande_credit->etat = 'EN_ATTENTE_DE_VALIDATION'; - $montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe; + $montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe; $demande_credit->id_demande = $this->getNanoCreditDemandID(); $demande_credit->save(); $message = trans('messages.successful_user_individual_nano_credit_demand', ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), - 'net' => $this->toMoney($demande_credit->montant, $init_country), - 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $init_country),]); + 'net' => $this->toMoney($demande_credit->montant, $init_country), 'duration' => $demande_credit->duree_mois, + 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $init_country),]); $this->sendMail($user->email, trans('messages.successful_nano_credit_demand'), $message); return $this->successResponse($message . trans('messages.sent_by_mail')); } @@ -191,7 +194,8 @@ class NanoCreditController extends Controller return $this->successResponse($demandes); } - public function cautionnerCredit(Request $request) + // Cautionner une demande de credit + public function guaranteeCredit(Request $request) { $this->validate($request, [ 'id_demande' => 'required', @@ -226,7 +230,7 @@ class NanoCreditController extends Controller if ($user_country != $agent_country) return $this->errorResponse('errors.operation_cannot_performed_in_country'); - $montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe; + $montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe; if ($montant_total > $walletAgent->balance_princ) return $this->errorResponse(trans('errors.insufficient_balance')); @@ -252,13 +256,13 @@ class NanoCreditController extends Controller $demande_credit->save(); $user_message = trans('messages.successful_guarantee_user_individual_nano_credit_demand', - ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), - 'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $agent_country), + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), 'duration' => $demande_credit->duree_mois, + 'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $agent_country), 'date' => $demande_credit->date_remboursement_prevu, 'agent_name' => $agent->lastname . ' ' . $agent->firstname, 'code_agent' => $agent->code_membre]); $agent_message = trans('messages.successful_guarantee_agent_individual_nano_credit_demand', - ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), - 'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $agent_country), + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $agent_country), 'duration' => $demande_credit->duree_mois, + 'net' => $this->toMoney($demande_credit->montant, $agent_country), 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $agent_country), 'date' => $demande_credit->date_remboursement_prevu, 'user_name' => $user->lastname . ' ' . $user->firstname, 'code_user' => $user->user_code]); $this->sendMail($user->email, trans('messages.successful_guarantee_nano_credit_demand'), $user_message); @@ -266,7 +270,7 @@ class NanoCreditController extends Controller return $this->successResponse($agent_message . trans('messages.sent_by_mail')); } - public function rembourserCredit(Request $request) + public function refundCredit(Request $request) { $this->validate($request, [ 'id_demande' => 'required', @@ -288,7 +292,7 @@ class NanoCreditController extends Controller return $this->errorResponse(trans('errors.nano_credit_already_refunded')); $init_country = $user->network->country->id; - $montant_total = $demande_credit->montant + $demande_credit->frais + $demande_credit->taxe; + $montant_total = $demande_credit->montant + $demande_credit->interet + $demande_credit->taxe; if ($montant_total > $walletUser->balance) return $this->errorResponse(trans('errors.insufficient_balance')); @@ -300,7 +304,8 @@ class NanoCreditController extends Controller if ($demande_credit->type_caution == 'individuel') { $walletAgent = Wallet::findOrFail($demande_credit->id_wallet_agent); - $walletAgent->balance_princ += $montant_total; + // Repartition des interet entre agents +// $walletHyper->balance_com += $demande_credit->interet; $walletAgent->save(); } @@ -310,7 +315,8 @@ class NanoCreditController extends Controller $walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $group->id_network)->firstOrFail(); $walletHyper = Wallet::findOrFail($walletHyper->wallet_id); - $walletHyper->balance_princ += $montant_total; + $walletHyper->balance_princ += $demande_credit->montant; + $walletHyper->balance_com += $demande_credit->interet; $walletHyper->save(); } @@ -321,8 +327,8 @@ class NanoCreditController extends Controller $demande_credit->save(); $message = trans('messages.successful_nano_credit_demand_refunded', - ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), - 'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->frais + $demande_credit->taxe, $init_country), + ['id_demand' => $demande_credit->id_demande, 'amount' => $this->toMoney($montant_total, $init_country), 'duration' => $demande_credit->duree_mois, + 'net' => $this->toMoney($demande_credit->montant, $init_country), 'fees' => $this->toMoney($demande_credit->interet + $demande_credit->taxe, $init_country), 'caution' => $demande_credit->type_caution == 'groupe' ? 'Groupe' : 'Individuel']); $this->sendMail($user->email, trans('messages.successful_nano_credit_refunded'), $message); return $this->successResponse($message . trans('messages.sent_by_mail')); @@ -342,7 +348,8 @@ class NanoCreditController extends Controller return $sommeEpargnes - $sommeCredits; } - public function getDureeMois($id_user) + // Recuperer les durees en mois + public function getDurations($id_user) { $user = User::findOrFail($id_user); @@ -372,7 +379,158 @@ class NanoCreditController extends Controller return $this->successResponse($mois); } - // Calculer les frais + // Faire une epargne + public function makeSavings(Request $request) + { + + $this->validate($request, [ + 'type' => 'required|in:simple,blocked', + 'duree_mois' => 'required_if:type,blocked|integer|min:0|not_in:0', + 'id_user' => 'required|integer|min:0|not_in:0', + 'password' => 'required', + 'montant' => 'required|numeric|min:0|not_in:0', + ]); + + $user = User::findOrFail($request->id_user); + if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt)) + return $this->errorResponse(trans('messages.incorrect_user_password')); + + $init_country = $user->network->country->id; + $result = ConfigWallet::join('networks', 'networks.id', '=', 'configWallet.id_network') + ->where('networks.country_id', $init_country)->where('configWallet.type', 'ilink') + ->select('configWallet.id')->first(); + if ($result) { + $config = ConfigWallet::findOrFail($result->id); + } else { + return $this->errorResponse(trans('errors.no_ilink_network')); + } + + if (!$config->has_nano_credit) + return $this->errorResponse(trans('errors.nano_credit_not_available')); + + $saving = new UsersEpargne(); + $saving->fill($request->all()); + $saving->id_network = $config->id_network; + $sumFees = 0; + $saving->date_creation = new \DateTime(); + if ($request->type == 'blocked') { + $taxes = array_values(array_filter($config->taxes->all(), function ($tax) { + return $tax->categorie == 'epargne'; + })); + + $paliers = array_values(array_filter($config->paliers_config_nano_credits->all(), function ($taux) { + return $taux->type == 'epargne'; + })); + + $saving->interet = $this->calculateFees($paliers, $request->montant, $request->duree_mois); + $saving->taxe = $this->calculateTax($taxes, $saving->interet); + $saving->type = 'BLOQUE'; + $saving->date_fin = $saving->date_creation->modify('+' . $request->duree_mois . ' month'); + + } else { + $saving->interet = 0; + $saving->taxe = 0; + $saving->type = 'SIMPLE'; + } + + $walletHyper = WalletAgent::where('category', 'hyper')->where('network_id', $config->id_network)->firstOrFail(); + $walletHyper = Wallet::findOrFail($walletHyper->wallet_id); + + $walletUser = WalletsUser::where('idUser', $request->id_user)->firstOrFail(); + $montant_total = $saving->montant + $saving->interet - $saving->taxe; + + + if ($saving->montant > $walletUser->balance) + return $this->errorResponse(trans('errors.insufficient_balance')); + + $saving->etat = 'EN_COURS'; + + $walletUser->balance -= $saving->montant; + + $user->balance_epargne += $montant_total; + $walletHyper->balance_com -= ($saving->interet - $saving->taxe); + $saving->id_epargne = $this->getSavingID(); + + $walletHyper->save(); + $walletUser->save(); + $user->save(); + $saving->save(); + + $message = trans('messages.successful_saving') . trans($request->type == 'blocked' ? + 'messages.successful_blocked_saving_details' : 'messages.successful_simple_saving_details', + ['id_saving' => $saving->id_epargne, 'amount' => $this->toMoney($montant_total, $init_country), 'type' => $saving->type, + 'net' => $this->toMoney($saving->montant, $init_country), 'fees' => $this->toMoney($saving->interet - $saving->taxe, $init_country), + 'date' => $saving->date_fin, 'duration' => $saving->duree_mois]); + $this->sendMail($user->email, trans('messages.successful_saving'), $message); + return $this->successResponse($message . trans('messages.sent_by_mail')); + + } + + // Casser une epargne + public function breakSavings(Request $request) + { + $this->validate($request, [ + 'id_epargne' => 'required', + 'id_user' => 'required|integer|min:0|not_in:0', + ]); + + $saving = UsersEpargne::where('id_epargne', $request->id_epargne)->firstOrFail(); + if ($saving->id_user != $request->id_user) + return $this->errorResponse(trans('errors.not_authorized_to_process_request')); + + if ($saving->etat == 'CASSE') + return $this->errorResponse(trans('errors.savings_already_broken')); + + $user = User::findOrFail($request->id_user); + $init_country = $user->network->country->id; + $walletUser = WalletsUser::where('idUser', $request->id_user)->firstOrFail(); + + if ($saving->type == 'BLOQUE') { + $montant_total = $saving->montant + $saving->interet - $saving->taxe; + } else { + $montant_total = $saving->montant; + } + + $user->balance_epargne -= $montant_total; + $walletUser->balance += $montant_total; + $saving->etat = 'CASSE'; + $saving->date_cassation = new \DateTime(); + + $user->save(); + $walletUser->save(); + $saving->save(); + + $message = trans('messages.successful_broken_saving') . trans($saving->type == 'BLOQUE' ? + 'messages.successful_blocked_saving_details' : 'messages.successful_simple_saving_details', + ['id_saving' => $saving->id_epargne, 'amount' => $this->toMoney($montant_total, $init_country), 'type' => $saving->type, + 'net' => $this->toMoney($saving->montant, $init_country), 'fees' => $this->toMoney($saving->interet - $saving->taxe, $init_country), + 'date' => $saving->date_fin, 'duration' => $saving->duree_mois]); + + $this->sendMail($user->email, trans('messages.successful_broken_saving'), $message); + return $this->successResponse($message . trans('messages.sent_by_mail')); + } + + public function getInfosNanoCredit($id_demand) + { + $demand = UsersDemandesCredit::where('id_demande', $id_demand)->first(); + if ($demand) { + return $this->successResponse($demand); + } else { + return $this->errorResponse(trans('errors.nano_credit_not_found')); + } + } + + public function getInfosSavings($id_saving) + { + $demand = UsersEpargne::where('id_epargne', $id_saving)->first(); + if ($demand) { + return $this->successResponse($demand); + } else { + return $this->errorResponse(trans('errors.savings_not_found')); + } + } + + // Calculer les interet private function calculateFees(array $paliers, $montant, $duree) { $size = sizeof($paliers); @@ -402,4 +560,14 @@ class NanoCreditController extends Controller return $code; } + private function getSavingID() + { + do { + $code = $this->generateGroupCode(); + $result = collect(DB::select('SELECT * FROM users_epargnes WHERE id_epargne = :code', ['code' => $code])); + $codeCorrect = sizeof($result) < 0; + } while ($codeCorrect); + return $code; + } + } diff --git a/app/Http/Controllers/UserGroupController.php b/app/Http/Controllers/UserGroupController.php index cff9bf9..9136e60 100755 --- a/app/Http/Controllers/UserGroupController.php +++ b/app/Http/Controllers/UserGroupController.php @@ -80,10 +80,10 @@ class UserGroupController extends Controller if (!$config->has_nano_credit) return $this->errorResponse(trans('errors.nano_credit_not_available')); - if ($request->limite_credit > $config->limite_credit_max) - return $this->errorResponse(trans('errors.credit_limit_is_greater_than_max')); - if ($request->limite_credit < $config->limite_credit_min) - return $this->errorResponse(trans('errors.credit_limit_is_less_than_min')); + + if ($request->limite_credit > $config->limite_credit_max || $request->limite_credit < $config->limite_credit_min) + return $this->errorResponse(trans('errors.group_credit_limit_must_be_between', + ['min_limit' => $this->toMoney($config->limite_credit_min, $init_country), 'max_limit' => $this->toMoney($config->limite_credit_max, $init_country)])); $group->fill($request->all()); // Envoyer des codes sponsors differents diff --git a/app/Models/UsersDemandesCredit.php b/app/Models/UsersDemandesCredit.php index 8aa15ea..5c6bfa0 100644 --- a/app/Models/UsersDemandesCredit.php +++ b/app/Models/UsersDemandesCredit.php @@ -18,7 +18,7 @@ use Illuminate\Database\Eloquent\Model; * @property int $duree_mois * @property string $type_caution * @property string $etat - * @property float $frais + * @property float $interet * @property float $taxe * @property Carbon $date_demande * @property Carbon $date_remboursement_prevu @@ -39,7 +39,7 @@ class UsersDemandesCredit extends Model protected $casts = [ 'montant' => 'float', 'duree_mois' => 'int', - 'frais' => 'float', + 'interet' => 'float', 'taxe' => 'float', 'id_user' => 'int', 'id_wallet_agent' => 'int', @@ -60,7 +60,7 @@ class UsersDemandesCredit extends Model 'duree_mois', 'type_caution', 'etat', - 'frais', + 'interet', 'taxe', 'date_demande', 'date_remboursement_prevu', diff --git a/app/Models/UsersEpargne.php b/app/Models/UsersEpargne.php new file mode 100644 index 0000000..28736fe --- /dev/null +++ b/app/Models/UsersEpargne.php @@ -0,0 +1,65 @@ + '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' + ]; +} diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 397692e..1ddad03 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -31,8 +31,7 @@ Paying network : :network :country', 'group_already_active' => 'This group is already active', 'sponsor_belongs_to_group' => 'Sponsor :id already belongs to a group', 'treated_group_demand' => 'Group validation request already processed', - 'credit_limit_is_greater_than_max' => 'The credit limit is greater than the maximum limit', - 'credit_limit_is_less_than_min' => 'The credit limit is lower than the minimum limit', + 'group_credit_limit_must_be_between' => 'The credit limit must be between :min_limit and :max_limit', 'sponsor_not_registered_in_same_country' => 'Sponsor :id is not registered in your country', 'sponsor_not_found' => 'This sponsor :id code does not exist', 'nano_credit_not_available' => 'Nano credit is not available in your country', @@ -48,11 +47,16 @@ Paying network : :network :country', 'not_belongs_to_any_group' => 'You do not belong to any group', 'your_group_not_active' => "Your group is not active. Talk to your sponsor", 'your_group_not_valid' => "Your group is not valid. Talk to your sponsor", - 'nano_credit_amount_must_be_less_than_group_limit' => "The amount of credit requested must be less than or equal to the group credit limit", + 'nano_credit_amount_must_be_between_the_group_limit' => "The amount of credit requested must be between :min_limit and :max_limit", "nano_credit_not_found" => "This nano credit request does not exist", "nano_credit_not_individual" => "This nano credit request is not individual", "last_nano_credit_not_refunded" => "Your last nano credit request was not refunded", "nano_credit_already_refunded" => "Repayment of credit already made", "sponsor_code_not_match" => "This sponsor code does not match to this group", "user_already_member_of_group" => "This user is already a member of a group", + "not_authorized_to_process_request" => "You are not authorized to process this request", + "savings_already_broken" => "Savings already broken", + "group_not_allow_to_borrow" => "The group is not allowed to borrow", + "borrowing_capacity_exceeded" => "The borrowing capacity is exceeded", + "savings_not_found" => "This savings does not exist" ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 4371213..9620eae 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -162,8 +162,9 @@ Request Information: - Request number: :id_demand - Type of deposit: Group - Credit amount: :amount - - Fees: :fees + - Interests : :fees - Net amount received: :net + - Duration (in months) : :duration - Redemption date: :date NB: The reimbursement process is automatic on the due date if the reimbursement is not initiated", @@ -173,8 +174,9 @@ Request Information: - Request number: :id_demand - Type of deposit: Individual - Credit amount: :amount - - Fees: :fees + - Interests : :fees - Net amount to be collected: :net + - Duration (in months) : :duration Go to a geolocated agent who agrees to back you up by validating your credit request", 'successful_guarantee_user_individual_nano_credit_demand' => "Guaranteed nanocredit request @@ -182,8 +184,9 @@ Request Information: - Request number: :id_demand - Type of deposit: Individual - Credit amount: :amount - - Fees: :fees + - Interests : :fees - Net amount received: :net + - Duration (in months) : :duration - Redemption date: :date - Agent names: :agent_name - Agent code: :code_agent", @@ -192,8 +195,9 @@ Request Information: - Request number: :id_demand - Type of deposit: Individual - Credit amount: :amount - - Fees: :fees + - Interests : :fees - Net amount received: :net + - Duration (in months) : :duration - Redemption date: :date - Client names: :user_name - Client code: :code_user @@ -206,11 +210,29 @@ Request Information: - Request number: :id_demand - Type of deposit: :deposit - Credit amount: :amount - - Fees: :fees + - Interests : :fees - Net amount received: :net", 'successful_accepted_group_membership_request' => "Membership request accepted", 'successful_canceled_group_membership_request' => "Membership request refused", 'successful_nano_credit_sent_to_hypervisor' => "Your request has been sent to your network hypervisor. You will receive the credit only after validation", 'successful_accepted_nano_credit_request' => "Nano credit request accepted", - 'successful_canceled_nano_credit_request' => "Nano credit request refused" + 'successful_canceled_nano_credit_request' => "Nano credit request refused", + "successful_saving" => "Successful savings", + "successful_blocked_saving_details" => " +Savings Information : + - Savings number : :id_saving + - Type : :type + - Amount at cassation : :amount + - Interests : :fees + - Net amount saved : :net + - Duration (in months) : :duration + - End date : :date", + "successful_simple_saving_details" => " +Savings Information : + - Savings number : :id_saving + - Type : :type + - Amount at cassation : :amount + - Interests : :fees + - Net amount saved : :net", + "successful_broken_saving" => "Broken savings", ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 1d503a2..4d7f6e8 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -31,8 +31,7 @@ Réseau payeur : :network :country', 'group_already_active' => 'Ce groupe est déjà actif', 'sponsor_belongs_to_group' => 'Sponsor :id appartient déjà à un groupe', 'treated_group_demand' => 'Demande de validation de groupe déjà traitée', - 'credit_limit_is_greater_than_max' => 'La limite de crédit est supérieur à la limite maximale', - 'credit_limit_is_less_than_min' => 'La limite de crédit est inférieure à la limite minimale', + 'group_credit_limit_must_be_between' => 'La limite de crédit doit être comprise entre :min_limit et :max_limit', 'sponsor_not_registered_in_same_country' => 'Sponsor :id n\'est pas enregistré dans votre pays', 'sponsor_not_found' => 'Ce code sponsor :id n\'existe pas', 'nano_credit_not_available' => 'Le nano credit n\'est pas disponible dans votre pays', @@ -48,11 +47,16 @@ Réseau payeur : :network :country', 'not_belongs_to_any_group' => "Vous n'appartennez à aucun groupe", 'your_group_not_active' => "Votre groupe n'est pas actif. Adressez-vous à votre sponsor", 'your_group_not_valid' => "Votre groupe n'est pas valide. Adressez-vous à votre sponsor", - 'nano_credit_amount_must_be_less_than_group_limit' => "Le montant du crédit demandé doit être inférieur ou égal à la limite crédit groupe", + 'nano_credit_amount_must_be_between_the_group_limit' => "Le montant du crédit demandé doit être compris entre :min_limit et :max_limit", "nano_credit_not_found" => "Cette demande de nano crédit n'existe pas", "nano_credit_not_individual" => "Cette demande de nano crédit n'est pas individuelle", "last_nano_credit_not_refunded" => "Votre derniere demande de nano crédit n'a pas été remboursée", "nano_credit_already_refunded" => "Remboursement de crédit deja effectué", "sponsor_code_not_match" => "Ce code sponsor ne correspond pas à ce groupe", "user_already_member_of_group" => "Cet utilisateur est déjà membre d'un groupe", + "not_authorized_to_process_request" => "Vous n'êtes pas autorisé à traiter cette requête", + "savings_already_broken" => "Épargne déjà cassée", + "group_not_allow_to_borrow" => "Le groupe n'a pas le droit d'emprunter", + "borrowing_capacity_exceeded" => "La capacité d'emprunt est dépassée", + "savings_not_found" => "Cette épargne n'existe pas" ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index b8ad9ea..b7c2698 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -162,8 +162,9 @@ Informations de la demande : - Numéro de la demande : :id_demand - Type de caution : Groupe - Montant du crédit : :amount - - Frais : :fees + - Intérêts : :fees - Montant net percu: :net + - Duréé (en mois) : :duration - Date de remboursement : :date NB: Le processus de remboursement est automatique à la date d'échéance si le remboursement n'est pas initié", @@ -173,8 +174,9 @@ Informations de la demande : - Numéro de la demande : :id_demand - Type de caution : Individuel - Montant du crédit : :amount - - Frais : :fees + - Intérêts : :fees - Montant net à percevoir : :net + - Duréé (en mois) : :duration Rendez vous chez un agent geolocalisé qui accepte de vous cautionner en validant votre demande de crédit", 'successful_guarantee_user_individual_nano_credit_demand' => "Demande de nano crédit cautionnée @@ -182,8 +184,9 @@ Informations de la demande : - Numéro de la demande : :id_demand - Type de caution : Individuel - Montant du crédit : :amount - - Frais : :fees + - Intérêts : :fees - Montant net percu : :net + - Duréé (en mois) : :duration - Date de remboursement : :date - Noms de l'agent : :agent_name - Code de l'agent : :code_agent", @@ -192,8 +195,9 @@ Informations de la demande : - Numéro de la demande : :id_demand - Type de caution : Individuel - Montant du crédit : :amount - - Frais : :fees + - Intérêts : :fees - Montant net à percu : :net + - Duréé (en mois) : :duration - Date de remboursement : :date - Noms du client : :user_name - Code du client : :code_user @@ -207,10 +211,30 @@ Informations de la demande : - Type de caution : :caution - Montant du crédit : :amount - Frais : :fees - - Montant net à percu : :net", + - Montant net percu : :net", 'successful_accepted_group_membership_request' => "Demande d'adhésion acceptée", 'successful_canceled_group_membership_request' => "Demande d'adhésion refusée", 'successful_nano_credit_sent_to_hypervisor' => "Votre demande a été envoyé à l'hyperviseur de votre reseau. Vous recevrez le credit seulement après validation", 'successful_accepted_nano_credit_request' => "Demande de nano credit acceptée", - 'successful_canceled_nano_credit_request' => "Demande de nano credit refusée" + 'successful_canceled_nano_credit_request' => "Demande de nano credit refusée", + "successful_saving" => "Epargne réussie", + "successful_blocked_saving_details" => " +Informations sur l'epargne : + - Numéro de l'epargne : :id_saving + - Type : :type + - Montant lors de la cassation : :amount + - Intérêts : :fees + - Montant net epargné : :net + - Duréé (en mois) : :duration + - Date de fin : :date +", + "successful_simple_saving_details" => " +Informations sur l'epargne : + - Numéro de l'epargne : :id_saving + - Type : :type + - Montant lors de la cassation : :amount + - Intérêts : :fees + - Montant net epargné : :net +", + "successful_broken_saving" => "Epargne cassée", ]; diff --git a/routes/web.php b/routes/web.php index 3c330f2..3272bd9 100755 --- a/routes/web.php +++ b/routes/web.php @@ -89,9 +89,16 @@ $router->group(['prefix' => '/groups'], function () use ($router) { //Nano credit $router->group(['prefix' => '/nanoCredit'], function () use ($router) { $router->post('ask', 'NanoCreditController@askNanoCredit'); - $router->post('guarantee', 'NanoCreditController@cautionnerCredit'); - $router->post('refund', 'NanoCreditController@rembourserCredit'); - $router->get('durations/{id_user}', 'NanoCreditController@getDureeMois'); + $router->post('guarantee', 'NanoCreditController@guaranteeCredit'); + $router->post('refund', 'NanoCreditController@refundCredit'); + $router->get('durations/{id_user}', 'NanoCreditController@getDurations'); $router->get('demands/{id_user}', 'NanoCreditController@getNanoCreditsDemands'); + $router->get('details/{id_demand}', 'NanoCreditController@getInfosNanoCredit'); + + $router->group(['prefix' => '/savings'], function () use ($router) { + $router->post('make', 'NanoCreditController@makeSavings'); + $router->post('break', 'NanoCreditController@breakSavings'); + $router->get('details/{id_saving}', 'NanoCreditController@getInfosSavings'); + }); }); });