您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

CreateClient.php 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace App\Filament\Company\Resources\Sales\ClientResource\Pages;
  3. use App\Concerns\HandlePageRedirect;
  4. use App\Enums\Common\AddressType;
  5. use App\Filament\Company\Resources\Sales\ClientResource;
  6. use App\Models\Common\Client;
  7. use Filament\Resources\Pages\CreateRecord;
  8. use Filament\Support\Enums\MaxWidth;
  9. use Illuminate\Database\Eloquent\Model;
  10. class CreateClient extends CreateRecord
  11. {
  12. use HandlePageRedirect;
  13. protected static string $resource = ClientResource::class;
  14. public function getMaxContentWidth(): MaxWidth | string | null
  15. {
  16. return MaxWidth::FiveExtraLarge;
  17. }
  18. protected function handleRecordCreation(array $data): Model
  19. {
  20. /** @var Client $record */
  21. $record = parent::handleRecordCreation($data);
  22. if (isset($data['primaryContact'], $data['primaryContact']['first_name'])) {
  23. $record->primaryContact()->create([
  24. 'is_primary' => true,
  25. 'first_name' => $data['primaryContact']['first_name'],
  26. 'last_name' => $data['primaryContact']['last_name'],
  27. 'email' => $data['primaryContact']['email'],
  28. 'phones' => $data['primaryContact']['phones'] ?? [],
  29. ]);
  30. }
  31. if (isset($data['secondaryContacts'])) {
  32. foreach ($data['secondaryContacts'] as $contactData) {
  33. if (isset($contactData['first_name'])) {
  34. $record->secondaryContacts()->create([
  35. 'is_primary' => false,
  36. 'first_name' => $contactData['first_name'],
  37. 'last_name' => $contactData['last_name'],
  38. 'email' => $contactData['email'],
  39. 'phones' => $contactData['phones'] ?? [],
  40. ]);
  41. }
  42. }
  43. }
  44. if (isset($data['billingAddress'], $data['billingAddress']['address_line_1'])) {
  45. $record->billingAddress()->create([
  46. 'type' => AddressType::Billing,
  47. 'address_line_1' => $data['billingAddress']['address_line_1'],
  48. 'address_line_2' => $data['billingAddress']['address_line_2'] ?? null,
  49. 'country_code' => $data['billingAddress']['country_code'] ?? null,
  50. 'state_id' => $data['billingAddress']['state_id'] ?? null,
  51. 'city' => $data['billingAddress']['city'] ?? null,
  52. 'postal_code' => $data['billingAddress']['postal_code'] ?? null,
  53. ]);
  54. }
  55. if (isset($data['shippingAddress'])) {
  56. $shippingData = $data['shippingAddress'];
  57. $shippingAddress = [
  58. 'type' => AddressType::Shipping,
  59. 'recipient' => $shippingData['recipient'] ?? null,
  60. 'phone' => $shippingData['phone'] ?? null,
  61. 'notes' => $shippingData['notes'] ?? null,
  62. ];
  63. if ($shippingData['same_as_billing'] ?? false) {
  64. $billingAddress = $record->billingAddress;
  65. if ($billingAddress) {
  66. $shippingAddress = [
  67. ...$shippingAddress,
  68. 'parent_address_id' => $billingAddress->id,
  69. 'address_line_1' => $billingAddress->address_line_1,
  70. 'address_line_2' => $billingAddress->address_line_2,
  71. 'country_code' => $billingAddress->country_code,
  72. 'state_id' => $billingAddress->state_id,
  73. 'city' => $billingAddress->city,
  74. 'postal_code' => $billingAddress->postal_code,
  75. ];
  76. $record->shippingAddress()->create($shippingAddress);
  77. }
  78. } elseif (isset($shippingData['address_line_1'])) {
  79. $shippingAddress = [
  80. ...$shippingAddress,
  81. 'address_line_1' => $shippingData['address_line_1'],
  82. 'address_line_2' => $shippingData['address_line_2'] ?? null,
  83. 'country_code' => $shippingData['country_code'] ?? null,
  84. 'state_id' => $shippingData['state_id'] ?? null,
  85. 'city' => $shippingData['city'] ?? null,
  86. 'postal_code' => $shippingData['postal_code'] ?? null,
  87. ];
  88. $record->shippingAddress()->create($shippingAddress);
  89. }
  90. }
  91. return $record;
  92. }
  93. }