feat: Update claim command, unit tests OK
This commit is contained in:
parent
f542100fca
commit
c0a33ef2ab
3 changed files with 85 additions and 39 deletions
|
|
@ -2,9 +2,15 @@
|
|||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Models\Basket;
|
||||
use App\Models\Campagne;
|
||||
use App\Models\Contact;
|
||||
use App\Models\Coupon;
|
||||
use App\Models\Customers;
|
||||
use App\Models\Site;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class CustomersClaims extends Command
|
||||
{
|
||||
|
|
@ -13,7 +19,7 @@ class CustomersClaims extends Command
|
|||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'customers:claims';
|
||||
protected $signature = 'customers:claims {--siteId=?} {destCampaignId} {destCouponId}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
|
|
@ -39,51 +45,89 @@ class CustomersClaims extends Command
|
|||
*/
|
||||
public function handle()
|
||||
{
|
||||
$siteId = 'LGL89';
|
||||
$claims = [
|
||||
'natacha.larche@orange.fr' => '01/10/2025',
|
||||
'delphine.byon@hotmail.fr' => '30/09/2025',
|
||||
'aurel_del@hotmail.fr' => '27/09/2025',
|
||||
'katy.lancelot@orange.fr' => '26/09/2025'
|
||||
];
|
||||
$destCampaignId = $this->argument('destCampaignId');
|
||||
$destCampaign = Campagne::findOrFail($destCampaignId);
|
||||
|
||||
$emails = array_keys($claims);
|
||||
$destCouponId = $this->argument('destCouponId');
|
||||
$destCoupon = Coupon::findOrFail($destCouponId);
|
||||
|
||||
// On récupère les contact dont l'identifiant est un ID de CRM
|
||||
$contacts = Contact::whereIn('contact_email', $emails)
|
||||
->where('contact_siteId', '=', $siteId)
|
||||
$siteIdArg = $this->option('siteId');
|
||||
if (is_null($siteIdArg)) {
|
||||
$this->table(
|
||||
['ID', 'Site ID', 'Label'],
|
||||
Site::all(['id', 'site_id', 'site_nom'])->toArray()
|
||||
);
|
||||
|
||||
$site = $this->validateInput(function () {
|
||||
return $this->ask('Enter site model id');
|
||||
}, 'required|numeric|min:1|max:50|exists:site,id');
|
||||
|
||||
$site = Site::find($site);
|
||||
} else {
|
||||
$site = Site::find($siteIdArg);
|
||||
}
|
||||
|
||||
$email = $this->validateInput(function () {
|
||||
return $this->ask('Enter customer email');
|
||||
}, 'required|email|min:1|max:255');
|
||||
|
||||
$crmHashcode = $this->validateInput(function () {
|
||||
return $this->ask('Enter customer hashcode');
|
||||
}, 'required|string|min:1|max:36');
|
||||
|
||||
$crmCountry = $this->validateInput(function () {
|
||||
return $this->ask('Enter customer country ISO code');
|
||||
}, 'required|numeric|in:56,250,442');
|
||||
|
||||
$date = $this->validateInput(function () {
|
||||
return $this->ask('Enter claim date');
|
||||
}, 'required|date_format:d/m/Y');
|
||||
|
||||
$contacts = Contact::where('contact_email', $email)
|
||||
->where('contact_siteId', '=', $site->site_id)
|
||||
->get();
|
||||
|
||||
$toAdd = [];
|
||||
|
||||
// Pour chaque contact
|
||||
$toAdd = 0;
|
||||
foreach ($contacts as $contact) {
|
||||
|
||||
$claimDate = Carbon::createFromFormat('d/m/Y', $claims[$contact->contact_email])->format('Y-m-d');
|
||||
|
||||
$claimDate = Carbon::createFromFormat('d/m/Y', $date)->format('Y-m-d');
|
||||
// On vient chercher les paniers dont la date de création est >= à la date de la récla
|
||||
$paniers = $contact->paniers()->where('panier_createdate', '>=', $claimDate)->get();
|
||||
|
||||
foreach ($paniers as $panier) {
|
||||
foreach ($panier->panierContents as $content) {
|
||||
$contactEmail = $contact->contact_email;
|
||||
$campId = $panier->panier_campId;
|
||||
$couponId = $content->panier_content_couponId;
|
||||
|
||||
if (!isset($toAdd[$contactEmail][$campId])) {
|
||||
$toAdd[$contactEmail][$campId] = [];
|
||||
}
|
||||
if (!isset($toAdd[$contactEmail][$campId][$couponId])) {
|
||||
$toAdd[$contactEmail][$campId][$couponId] = 0;
|
||||
}
|
||||
|
||||
$toAdd[$contactEmail][$campId][$couponId] += $content->panier_content_printed;
|
||||
$toAdd += $content->panier_content_printed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dd($toAdd);
|
||||
$qty = $this->validateInput(function () use ($toAdd) {
|
||||
return $this->ask('Enter quantity to add', $toAdd);
|
||||
}, 'required|numeric|max:20');
|
||||
|
||||
$customer = Customers::firstOrNew([
|
||||
'hashcode' => $crmHashcode,
|
||||
'email' => $email,
|
||||
'country' => $crmCountry,
|
||||
]);
|
||||
$customer->saveOrFail();
|
||||
|
||||
$basket = Basket::updateContent($destCampaign, [$destCoupon->coupon_id => $qty], $customer);
|
||||
|
||||
$this->info(url()->route("fo.basket.show", $basket));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private function validateInput($method, $rules)
|
||||
{
|
||||
$value = $method(); // Ask user input
|
||||
$validator = Validator::make(['input' => $value], ['input' => $rules]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
foreach ($validator->errors()->all() as $error) {
|
||||
$this->warn($error);
|
||||
}
|
||||
return $this->validateInput($method, $rules); // Retry
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ use App\Models\Campagne;
|
|||
use App\Enums\LogActions;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Basket;
|
||||
use App\Models\Coupon;
|
||||
use App\Models\Customers;
|
||||
use App\Traits\CouponTrait;
|
||||
use App\Traits\ThanksTrait;
|
||||
|
|
@ -88,10 +89,11 @@ class BasketController extends Controller
|
|||
$couponCode = substr($item, $pos + 1);
|
||||
|
||||
if (is_numeric($quantity) && is_numeric($couponCode) && $quantity > 0) {
|
||||
if (isset($coupons[$couponCode])) {
|
||||
$coupons[$couponCode] += $quantity;
|
||||
$coupon = Coupon::where('coupon_code', $couponCode)->first();
|
||||
if (isset($coupons[$coupon->coupon_id])) {
|
||||
$coupons[$coupon->coupon_id] += $quantity;
|
||||
} else {
|
||||
$coupons[$couponCode] = $quantity;
|
||||
$coupons[$coupon->coupon_id] = $quantity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -117,8 +119,8 @@ class BasketController extends Controller
|
|||
|
||||
// Prepare panierCoupons for logging
|
||||
$panierCoupons = [];
|
||||
foreach ($coupons as $code => $qty) {
|
||||
$panierCoupons[] = ['cp_code' => $code, 'qty' => $qty];
|
||||
foreach ($coupons as $coupon_id => $qty) {
|
||||
$panierCoupons[] = ['coupon_id' => $coupon_id, 'qty' => $qty];
|
||||
}
|
||||
|
||||
// Retrieve customer
|
||||
|
|
|
|||
|
|
@ -56,8 +56,8 @@ class Basket extends Model
|
|||
$basket->save();
|
||||
}
|
||||
|
||||
foreach ($coupons as $couponCode => $quantity) {
|
||||
$associatedCoupon = $campagne->coupons()->where('coupon_code', $couponCode)->first();
|
||||
foreach ($coupons as $couponId => $quantity) {
|
||||
$associatedCoupon = $campagne->coupons()->where('coupon_id', $couponId)->first();
|
||||
|
||||
if ($associatedCoupon) {
|
||||
$basketContent = BasketContent::where(['basket_id' => $basket->id, 'coupon_id' => $associatedCoupon->coupon_id])->first();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue