argument('destCampaignId'); $destCampaign = Campagne::findOrFail($destCampaignId); $destCouponId = $this->argument('destCouponId'); $destCoupon = Coupon::findOrFail($destCouponId); $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 = 0; foreach ($contacts as $contact) { $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) { $toAdd += $content->panier_content_printed; } } } $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; } }