|
- <?php
-
- namespace App\Kintone\Models;
-
- use App\Kintone\Repositories\SeasonTicketContractRepository;
- use Illuminate\Support\Facades\Auth;
-
- /**
- * アプリ名 顧客マスタ
- * @property int customerCode
- * @property string customerName
- * @property string customerNameKana
- * @property string paymentMethod
- * @property string email
- * @property string phoneNumber
- * @property string zipCode
- * @property string address
- * @property string bankBranchId
- * @property ?Carbon bankAccountRegisterRemaindDatetime
- * @property ?int icSeasonTicektUserId
- */
- class Customer extends KintoneModel
- {
- const CONFIG_KEY = "KINTONE_APP_CUSTOMER";
-
- const FIELD_CUSTOMER_CODE = "CustomerCode";
- const FIELD_CUSTOMER_NAME = "CustomerName";
- const FIELD_CUSTOMER_NAME_KANA = "顧客名カナ";
- const FIELD_PAYMENT_METHOD = "支払方法";
- const FIELD_EMAIL = "メールアドレス";
- const FIELD_PHONE_NUMBER = "電話番号";
- const FIELD_ZIP_CODE = "契約者_郵便番号";
- const FIELD_ADDRESS = "住所";
- const FIELD_BANK_BRANCH_ID = "ChargedBankBranchCode";
- const FIELD_BANK_ACCOUNT_REGISTER_REMAIND_DATETIME = "口座登録催促予定日時";
- const FIELD_IC_SEASON_TICEKT_USER_ID = "IC定期関連情報_ユーザーID";
-
- protected const FIELDS = [
- ...parent::FIELDS,
- self::FIELD_CUSTOMER_CODE => FieldType::NUMBER,
- self::FIELD_CUSTOMER_NAME => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_CUSTOMER_NAME_KANA => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_PAYMENT_METHOD => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_EMAIL => FieldType::LINK,
- self::FIELD_PHONE_NUMBER => FieldType::LINK,
- self::FIELD_ZIP_CODE => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_ADDRESS => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_BANK_BRANCH_ID => FieldType::SINGLE_LINE_TEXT,
- self::FIELD_BANK_ACCOUNT_REGISTER_REMAIND_DATETIME => FieldType::DATETIME,
- self::FIELD_IC_SEASON_TICEKT_USER_ID => FieldType::NUMBER,
- ];
-
- protected const FIELD_NAMES = [
- ...parent::FIELD_NAMES,
- self::FIELD_CUSTOMER_CODE => 'customer_code',
- self::FIELD_CUSTOMER_NAME => 'customer_name',
- self::FIELD_CUSTOMER_NAME_KANA => 'customer_name_kana',
- self::FIELD_EMAIL => 'email',
- self::FIELD_ZIP_CODE => 'zip_code',
- self::FIELD_ADDRESS => 'address',
- self::FIELD_PHONE_NUMBER => 'phone_no',
- ];
-
- // キャッシュ
- private bool|null $canPayByCreditcard = null;
-
- public static function getSelf(): static
- {
- return static::getAccess()->find(Auth::user()->kintone_id);
- }
-
- public static function findByCustomerCode(string $customerCode)
- {
- return static::getAccess()->first(static::getQuery()->where(self::FIELD_CUSTOMER_CODE, $customerCode));
- }
-
- protected function toArrayCustom(): array
- {
- return [
- 'customer_name_kana_hankaku' => mb_convert_kana($this->customerNameKana, "sk"),
- 'can_pay_by_creditcard' => $this->canPayByCreditcard(),
- 'can_apply_to_change_payment_method_creditcard' => $this->canApplyToChangePaymentMethodCreditcard(),
- ];
- }
-
- public function isHTICWebUser(): bool
- {
- return !!$this->icSeasonTicektUserId;
- }
-
- public function canPayByCreditcard(bool $refresh = false): bool
- {
- // キャッシュがあればそれを返却する
- if (is_bool($this->canPayByCreditcard) && $refresh === false) {
- return $this->canPayByCreditcard;
- }
-
- $list = SeasonTicketContractRepository::get($this->customerCode);
- foreach ($list as $ele) {
- if (!$ele->plan->canPayByCreditcard()) {
- $this->canPayByCreditcard = false;
- return $this->canPayByCreditcard;
- }
- }
- $this->canPayByCreditcard = true;
- return $this->canPayByCreditcard;
- }
-
- // クレジットカード登録申請可否
- public function canApplyToChangePaymentMethodCreditcard()
- {
- return $this->paymentMethod !== "クレジット" && $this->canPayByCreditcard();
- }
- }
|