walletservice/app/Http/Controllers/NanoCreditController.php

272 lines
9.5 KiB
PHP
Raw Normal View History

2020-08-03 07:42:28 +00:00
<?php
namespace App\Http\Controllers;
use App\Models\ConfigWallet;
use App\Models\Identification;
use App\Models\Network;
use App\Models\NetworksAgent;
use App\Models\TransfertCommissionTransaction;
use App\Models\UsersGroup;
use App\Models\UsersGroupsDemandesValidation;
use App\Models\Wallet;
use App\Models\WalletTransaction;
use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
class NanoCreditController extends Controller
{
use ApiResponser;
use Helper;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function createGroup(Request $request)
{
$group = new UsersGroup();
$this->validate($request, [
'id_user' => 'required|integer|min:0|not_in:0',
'nom' => 'required',
'code_sponsor1' => 'required',
'code_sponsor2' => 'required',
'code_sponsor3' => 'required',
'password' => 'required',
'limite_credit' => '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'));
$group->fill($request->all());
// Envoyer des codes sponsors differents
//Check sponsor 1
$resp1 = $this->checkSponsorIdentification($request->code_sponsor1, 1);
if (is_numeric($resp1))
$group->id_sponsor1 = $resp1;
else
return $resp1;
//Check sponsor 2
$resp2 = $this->checkSponsorIdentification($request->code_sponsor2, 2);
if (is_numeric($resp2))
$group->id_sponsor2 = $resp2;
else
return $resp2;
//Check sponsor 3
$resp3 = $this->checkSponsorIdentification($request->code_sponsor3, 3);
if (is_numeric($resp3))
$group->id_sponsor3 = $resp3;
else
return $resp3;
$group->id_createur = $request->id_user;
$group->date_creation = new \DateTime();
$group->nombre_validation = 0;
$group->actif = false;
$group->valide = false;
$group->save();
$this->sendNotificationToSponsor($group->id, $group->id_sponsor1);
$this->sendNotificationToSponsor($group->id, $group->id_sponsor2);
$this->sendNotificationToSponsor($group->id, $group->id_sponsor3);
return $this->successResponse(trans('messages.successful_user_group_created'));
}
public function validateGroup(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)
return $this->errorResponse(trans('errors.treated_group_demand'));
if ($demande->id_sponsor != $request->id_user)
return $this->errorResponse(trans('errors.not_group_sponsor'));
$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'));
++$group->nombre_validation;
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();
}
$group->save();
$demande->statut = true;
$demande->date_validation = new \DateTime();
$demande->save();
// Create credit and epargne account
return $this->successResponse(trans_choice('messages.successful_group_validation', 3 - $group->nombre_validation, ['count' => (3 - $group->nombre_validation)]));
}
public function updateGroup(Request $request)
{
$this->validate($request, [
'code_groupe' => 'required',
'code_sponsor1' => 'required',
'code_sponsor2' => 'required',
'code_sponsor3' => 'required',
'password' => 'required',
'limite_credit' => 'required|numeric|min:0|not_in:0',
]);
$group = UsersGroup::where('code_groupe', $request->code_groupe)->firstOrFail();
$user = User::findOrFail($group->id_createur);
if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt))
return $this->errorResponse(trans('messages.incorrect_user_password'));
$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();
if ($sponsor1->id != $group->id_sponsor1) {
$prevSponsor1 = $group->sponsor1;
//Check sponsor 1
$resp1 = $this->checkSponsorIdentification($request->code_sponsor1, 1);
if (is_numeric($resp1))
$group->id_sponsor1 = $resp1;
else
return $resp1;
--$group->nombre_validation;
$prevSponsor1->group_id = null;
}
if ($sponsor2->id != $group->id_sponsor2) {
$prevSponsor2 = $group->sponsor2;
//Check sponsor 2
$resp2 = $this->checkSponsorIdentification($request->code_sponsor2, 2);
if (is_numeric($resp2))
$group->id_sponsor2 = $resp2;
else
return $resp2;
--$group->nombre_validation;
$prevSponsor2->group_id = null;
}
if ($sponsor3->id != $group->id_sponsor3) {
$prevSponsor3 = $group->sponsor3;
//Check sponsor 3
$resp3 = $this->checkSponsorIdentification($request->code_sponsor3, 3);
if (is_numeric($resp3))
$group->id_sponsor3 = $resp3;
else
return $resp3;
--$group->nombre_validation;
$prevSponsor3->group_id = null;
}
$group->fill($request->all());
$group->actif = false;
$group->date_activation = null;
if (isset($prevSponsor1)) {
$prevSponsor1->save();
$this->sendNotificationToSponsor($group->id, $group->id_sponsor1);
}
if (isset($prevSponsor2)) {
$prevSponsor2->save();
$this->sendNotificationToSponsor($group->id, $group->id_sponsor2);
}
if (isset($prevSponsor3)) {
$prevSponsor3->save();
$this->sendNotificationToSponsor($group->id, $group->id_sponsor3);
}
$group->save();
return $this->successResponse(trans('messages.successful_user_group_modificated'));
}
private function sendNotificationToSponsor($id_group, $id_sponsor)
{
$demande = new UsersGroupsDemandesValidation();
$demande->id_group = $id_group;
$demande->id_sponsor = $id_sponsor;
$demande->date_creation = new \DateTime();
$demande->statut = false;
$demande->save();
}
private function checkSponsorIdentification($code_sponsor, $id)
{
$sponsor = User::where('user_code', $code_sponsor)->first();
//Verifier s'il appartient a un groupe
if (isset($sponsor->group_id))
return $this->errorResponse(trans('errors.sponsor_belongs_to_group', ['id' => $id]));
if ($sponsor) {
return $this->checkUserIdentification($sponsor->id, $id);
} else {
return $this->errorResponse('Ce code sponsor' . $id . ' n\'existe pas ');
}
}
private function checkUserIdentification($id_user, $id)
{
$identification = Identification::where('id_user', $id_user)->first();
if (isset($identification)) {
if ($identification->status == 0)
return $this->errorResponse(trans('errors.validation_sponsor_identification_required', ['id' => $id]));
else
return $id_user;
} else {
return $this->errorResponse(trans('errors.sponsor_identification_required', ['id' => $id]));
}
}
private function getGroupID()
{
do {
$code = $this->generateGroupCode();
$result = collect(DB::select('SELECT * FROM users_groups WHERE code_groupe = :code', ['code' => $code]));
$codeCorrect = sizeof($result) < 0;
} while ($codeCorrect);
return $code;
}
private function generateGroupCode($length = 8)
{
$characters = '23456789ABCDEFGHJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
}