diff --git a/app/Http/Controllers/UserGroupController.php b/app/Http/Controllers/UserGroupController.php index b3b677b..fe437dd 100755 --- a/app/Http/Controllers/UserGroupController.php +++ b/app/Http/Controllers/UserGroupController.php @@ -125,24 +125,12 @@ class UserGroupController 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 != 0) return $this->errorResponse(trans('errors.treated_group_demand')); @@ -150,6 +138,19 @@ class UserGroupController extends Controller if ($demande->id_sponsor != $request->id_user) return $this->errorResponse(trans('errors.not_group_sponsor')); + if ($demande->type == 'creation') + return $this->validateGroupCreationDemand($request, $demande); + if ($demande->type == 'suppression') + return $this->validateDeletingGroupDemand($request, $demande); + if ($demande->type == 'adhesion') + return $this->validateMembershipGroupDemand($request, $demande); + + } + + + private function validateGroupCreationDemand(Request $request, UsersGroupsDemandesValidation $demande) + { + $sponsor = User::findOrFail($request->id_user); $group = UsersGroup::findOrFail($demande->id_group); @@ -187,7 +188,6 @@ class UserGroupController extends Controller $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) @@ -209,20 +209,28 @@ class UserGroupController extends Controller $data->data = new \stdClass();; $data->data->id = $request->id_demande; - if ($request->type == 'creation') { + if ($demande->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') { + if ($demande->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')); } + if ($demande->type == 'adhesion') { + $user = User::findOrFail($demande->id_user); + $this->sendPushNotificationToUser($user->user_code, + trans('notifications.successful_canceled_group_membership_request', ['name' => $sponsor->lastname . ' ' . $sponsor->firstname]), $data); + + return $this->successResponse(trans('messages.successful_refused_group_deleting')); + } + } public function updateGroup(Request $request) @@ -328,7 +336,7 @@ class UserGroupController extends Controller } - public function sendNotificationToSponsor($id_group, $id_sponsor, $sponsor_code, User $sender, $type = 'creation') + private function sendNotificationToSponsor($id_group, $id_sponsor, $sponsor_code, User $sender, $type = 'creation') { $demande = new UsersGroupsDemandesValidation(); $demande->id_group = $id_group; @@ -336,19 +344,32 @@ class UserGroupController extends Controller $demande->date_creation = new \DateTime(); $demande->statut = false; $demande->type = $type; - $demande->save(); + $data = new \stdClass(); - $data->screen = $type == 'creation' ? "demandeValidationGroupe" : "demandeSuppressionGroupe"; + + if ($type == 'creation') { + $data->screen = "demandeValidationGroupe"; + $message_id = 'notifications.group_validation_request'; + } else if ($type == 'suppression') { + $data->screen = "demandeSuppressionGroupe"; + $message_id = 'notifications.group_deleting_request'; + } else if ($type == 'adhesion') { + $demande->id_user = $sender->id; + $data->screen = "demandJoinGroup"; + $message_id = 'notifications.group_membership_request'; + } else { + $data->screen = "notificationview"; + $message_id = 'notifications.group_deleting_request'; + } + + $demande->save(); $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); + $this->sendPushNotificationToUser($sponsor_code, + trans($message_id, ['name' => $sender->lastname . ' ' . $sender->firstname]), $data); + } public function getGroupDemand($id_demand) @@ -387,7 +408,7 @@ ug.date_creation , ug.createur , ug.sponsor1 , ug.sponsor2 , ug.sponsor3, ug.cou $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')); + return $this->errorResponse(trans('errors.sponsor_code_not_match')); $user = User::findOrFail($request->id_user); if (isset($user->group_id)) @@ -403,13 +424,39 @@ ug.date_creation , ug.createur , ug.sponsor1 , ug.sponsor2 , ug.sponsor3, ug.cou if (!($identfication instanceof Identification)) return $identfication; + // Notifier le sponsor + $this->sendNotificationToSponsor($group->id, $sponsor->id, $sponsor->user_code, $user, 'adhesion'); + return $this->successResponse(trans('messages.successful_group_membership_request')); + + } + + private function validateMembershipGroupDemand(Request $request, UsersGroupsDemandesValidation $demande) + { + + $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')); + + $user = User::findOrFail($demande->id_user); $user->group_id = $group->id; $user->date_adhesion = new \DateTime(); $user->save(); ++$group->nombre_utilisateurs; $group->save(); - // Notifier les determinants - return $this->successResponse(trans('messages.successful_group_adhesion')); + + $demande->statut = true; + $demande->date_validation = new \DateTime(); + $demande->save(); + // Notififier l'utilisateur + $data = new \stdClass(); + $data->screen = "notificationview"; + $data->data = new \stdClass();; + $data->data->id = $request->id_demande; + $this->sendPushNotificationToUser($user->user_code, + trans('notifications.accepted_group_membership_request', ['name' => $sponsor->lastname . ' ' . $sponsor->firstname]), $data); + + return $this->successResponse(trans('messages.successful_accepted_group_membership_request')); } @@ -432,19 +479,8 @@ ug.date_creation , ug.createur , ug.sponsor1 , ug.sponsor2 , ug.sponsor3, ug.cou } - private function validateDeletingGroupDemand(Request $request) + private function validateDeletingGroupDemand(Request $request, UsersGroupsDemandesValidation $demande) { - $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); diff --git a/app/Models/UsersGroupsDemandesValidation.php b/app/Models/UsersGroupsDemandesValidation.php index 3e22b8f..70b3f78 100644 --- a/app/Models/UsersGroupsDemandesValidation.php +++ b/app/Models/UsersGroupsDemandesValidation.php @@ -15,6 +15,7 @@ use Illuminate\Database\Eloquent\Model; * @property int $id * @property int $id_group * @property int $id_sponsor + * @property int $id_user * @property int $statut * @property Carbon $date_validation * @property Carbon $date_creation @@ -30,6 +31,7 @@ class UsersGroupsDemandesValidation extends Model protected $casts = [ 'id_group' => 'int', 'id_sponsor' => 'int', + 'id_user' => 'int', 'statut' => 'int' ]; @@ -41,6 +43,7 @@ class UsersGroupsDemandesValidation extends Model protected $fillable = [ 'id_group', 'id_sponsor', + 'id_user', 'statut', 'date_validation', 'date_creation', diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 9539d43..8156c0d 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -52,5 +52,6 @@ Paying network : :network :country', "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" + "nano_credit_already_refunded" => "Repayment of credit already made", + "sponsor_code_not_match" => "This sponsor code does not match to this group", ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 1e1f25f..b1f49b1 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -152,7 +152,7 @@ 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_group_membership_request' => "Your membership request has been sent to the sponsor", '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', @@ -208,4 +208,6 @@ Request Information: - Credit amount: :amount - Fees: :fees - Net amount received: :net", + 'successful_accepted_group_membership_request' => "Membership request accepted", + 'successful_canceled_group_membership_request' => "Membership request refused", ]; diff --git a/resources/lang/en/notifications.php b/resources/lang/en/notifications.php index 71a4f0c..fca6f31 100755 --- a/resources/lang/en/notifications.php +++ b/resources/lang/en/notifications.php @@ -6,4 +6,7 @@ return [ "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", + "group_membership_request" => ":name has sent you a group membership request", + "accepted_group_membership_request" => ":name has accepted your group membership request", + "refused_group_membership_request" => ":name has refused your group membership request", ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 2f77bac..29fad00 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -52,5 +52,6 @@ Réseau payeur : :network :country', "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é" + "nano_credit_already_refunded" => "Remboursement de crédit deja effectué", + "sponsor_code_not_match" => "Ce code sponsor ne correspond pas à ce groupe", ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 56806e1..63d395b 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -152,7 +152,7 @@ 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_group_membership_request' => "Votre demande d'adhésion a été envoyé au sponsor", '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', @@ -208,4 +208,6 @@ Informations de la demande : - Montant du crédit : :amount - Frais : :fees - 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", ]; diff --git a/resources/lang/fr/notifications.php b/resources/lang/fr/notifications.php index 77e7f71..2a9128a 100755 --- a/resources/lang/fr/notifications.php +++ b/resources/lang/fr/notifications.php @@ -6,4 +6,7 @@ return [ "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", + "group_membership_request" => ":name vous a envoyé une demande d'adhésion de groupe", + "accepted_group_membership_request" => ":name a accepté votre demande d'adhésion de groupe", + "refused_group_membership_request" => ":name a refusé votre demande d'adhésion de groupe", ];