+ Add CRUD of NanoCredit users groups
This commit is contained in:
parent
95de0364c0
commit
1a998259c8
|
@ -0,0 +1,271 @@
|
|||
<?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;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Created by Reliese Model.
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class UsersGroup
|
||||
*
|
||||
* @property int $id
|
||||
* @property string $code_groupe
|
||||
* @property string $nom
|
||||
* @property float $limite_credit
|
||||
* @property int $id_sponsor1
|
||||
* @property int $id_sponsor2
|
||||
* @property int $id_sponsor3
|
||||
* @property int $nombre_validation
|
||||
* @property int $actif
|
||||
* @property int $valide
|
||||
* @property int $id_createur
|
||||
* @property Carbon $date_creation
|
||||
* @property Carbon $date_activation
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
class UsersGroup extends Model
|
||||
{
|
||||
protected $table = 'users_groups';
|
||||
public $timestamps = false;
|
||||
|
||||
protected $casts = [
|
||||
'limite_credit' => 'float',
|
||||
'id_sponsor1' => 'int',
|
||||
'id_sponsor2' => 'int',
|
||||
'id_sponsor3' => 'int',
|
||||
'nombre_validation' => 'int',
|
||||
'actif' => 'int',
|
||||
'valide' => 'int',
|
||||
'id_createur' => 'int'
|
||||
];
|
||||
|
||||
protected $dates = [
|
||||
'date_creation',
|
||||
'date_activation'
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'code_groupe',
|
||||
'nom',
|
||||
'limite_credit',
|
||||
'id_sponsor1',
|
||||
'id_sponsor2',
|
||||
'id_sponsor3',
|
||||
'nombre_validation',
|
||||
'actif',
|
||||
'valide',
|
||||
'id_createur',
|
||||
'date_creation',
|
||||
'date_activation'
|
||||
];
|
||||
|
||||
public function createur()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'id_createur');
|
||||
}
|
||||
|
||||
public function sponsor1()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'id_sponsor1');
|
||||
}
|
||||
|
||||
public function sponsor2()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'id_sponsor2');
|
||||
}
|
||||
|
||||
public function sponsor3()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'id_sponsor3');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Created by Reliese Model.
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class UsersGroupsDemandesValidation
|
||||
*
|
||||
* @property int $id
|
||||
* @property int $id_group
|
||||
* @property int $id_sponsor
|
||||
* @property int $statut
|
||||
* @property Carbon $date_validation
|
||||
* @property Carbon $date_creation
|
||||
*
|
||||
* @package App\Models
|
||||
*/
|
||||
class UsersGroupsDemandesValidation extends Model
|
||||
{
|
||||
protected $table = 'users_groups_demandes_validations';
|
||||
public $timestamps = false;
|
||||
|
||||
protected $casts = [
|
||||
'id_group' => 'int',
|
||||
'id_sponsor' => 'int',
|
||||
'statut' => 'int'
|
||||
];
|
||||
|
||||
protected $dates = [
|
||||
'date_validation',
|
||||
'date_creation'
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'id_group',
|
||||
'id_sponsor',
|
||||
'statut',
|
||||
'date_validation',
|
||||
'date_creation'
|
||||
];
|
||||
}
|
|
@ -151,4 +151,5 @@ 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',
|
||||
];
|
||||
|
|
|
@ -151,4 +151,5 @@ 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',
|
||||
];
|
||||
|
|
|
@ -73,4 +73,5 @@ $router->group(['prefix' => '/identifications'], function () use ($router) {
|
|||
$router->group(['prefix' => '/groups'], function () use ($router) {
|
||||
$router->post('', 'NanoCreditController@createGroup');
|
||||
$router->put('', 'NanoCreditController@validateGroup');
|
||||
$router->post('update', 'NanoCreditController@updateGroup');
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue