company_id) ? Company::getIdForCurrentUser($this->company_id) : $this->company_id; $this->parseLastAuditDate(); $this->merge([ 'asset_tag' => $this->asset_tag ?? Asset::autoincrement_asset(), 'company_id' => $idForCurrentUser, 'assigned_to' => $assigned_to ?? null, ]); } /** * Get the validation rules that apply to the request. * * @return array */ public function rules(): array { $modelRules = (new Asset)->getRules(); if (Setting::getSettings()->digit_separator === '1.234,56' && is_string($this->input('purchase_cost'))) { // If purchase_cost was submitted as a string with a comma separator // then we need to ignore the normal numeric rules. // Since the original rules still live on the model they will be run // right before saving (and after purchase_cost has been // converted to a float via setPurchaseCostAttribute). $modelRules = $this->removeNumericRulesFromPurchaseCost($modelRules); } return array_merge( $modelRules, parent::rules(), ); } private function parseLastAuditDate(): void { if ($this->input('last_audit_date')) { try { $lastAuditDate = Carbon::parse($this->input('last_audit_date')); $this->merge([ 'last_audit_date' => $lastAuditDate->startOfDay()->format('Y-m-d H:i:s'), ]); } catch (InvalidFormatException $e) { // we don't need to do anything here... // we'll keep the provided date in an // invalid format so validation picks it up later } } } private function removeNumericRulesFromPurchaseCost(array $rules): array { $purchaseCost = $rules['purchase_cost']; // If rule is in "|" format then turn it into an array if (is_string($purchaseCost)) { $purchaseCost = explode('|', $purchaseCost); } $rules['purchase_cost'] = array_filter($purchaseCost, function ($rule) { return $rule !== 'numeric' && $rule !== 'gte:0'; }); return $rules; } }