Przeglądaj źródła

メール対応

master
sosuke.iwabuchi 2 lat temu
rodzic
commit
7357527fdb
34 zmienionych plików z 420 dodań i 63 usunięć
  1. +12
    -0
      app/Codes/Email.php
  2. +17
    -14
      app/Email/Members/EntryApprove.php
  3. +15
    -12
      app/Email/Members/EntryPaymentComplete.php
  4. +7
    -5
      app/Email/Members/Members.php
  5. +5
    -2
      app/Email/Members/ParkingCertificateOrderNotice.php
  6. +5
    -2
      app/Email/Members/SeasonTicketReOrderNotice.php
  7. +5
    -2
      app/Email/Members/StickerReOrderNotice.php
  8. +5
    -2
      app/Email/Members/TerminateOrderApprove.php
  9. +5
    -2
      app/Email/Members/TerminateOrderComplete.php
  10. +5
    -2
      app/Email/Members/TerminateOrderNotice.php
  11. +5
    -2
      app/Email/Members/UserInfoUpdateOrderApprove.php
  12. +5
    -2
      app/Email/Members/UserInfoUpdateOrderNotice.php
  13. +5
    -2
      app/Email/Members/VehicleInfoUpdateOrderApprove.php
  14. +5
    -2
      app/Email/Members/VehicleInfoUpdateOrderNotice.php
  15. +141
    -0
      app/Http/Controllers/Web/Email/EmailSendController.php
  16. +26
    -0
      app/Http/Controllers/Web/Email/EmailSendParam.php
  17. +1
    -1
      app/Http/Controllers/Web/SeasonTicketContract/ParkingCertificateOrderController.php
  18. +1
    -1
      app/Http/Controllers/Web/SeasonTicketContract/SeasonTicketReOrderController.php
  19. +1
    -1
      app/Http/Controllers/Web/SeasonTicketContract/StickerReOrderController.php
  20. +1
    -1
      app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderController.php
  21. +10
    -0
      app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderOptionsController.php
  22. +1
    -1
      app/Http/Controllers/Web/SeasonTicketContract/UpdateVehicleInfoOrderController.php
  23. +5
    -3
      app/Kintone/KintoneAccess.php
  24. +5
    -0
      app/Kintone/Models/Customer.php
  25. +10
    -0
      app/Kintone/Models/GeneralApplication.php
  26. +1
    -1
      app/Kintone/Models/KintoneModel.php
  27. +26
    -1
      app/Kintone/Models/Parking.php
  28. +12
    -0
      app/Kintone/Models/SeasonTicketContract.php
  29. +54
    -0
      app/Kintone/Models/SeasonTicketContractEntry.php
  30. +3
    -0
      app/Providers/RouteServiceProvider.php
  31. +1
    -0
      config/kintone.php
  32. +3
    -1
      config/mail.php
  33. +1
    -1
      resources/views/emails/members/entry_approve.blade.php
  34. +16
    -0
      routes/api_email.php

+ 12
- 0
app/Codes/Email.php Wyświetl plik

@@ -0,0 +1,12 @@
<?php

namespace App\Codes;

enum Email: string
{
case TERMINATE_ORDER_APPROVE = '解約承認';
case VEHICLE_INFO_UPDATE_ORDER_APPROVE = '車両番号・防犯登録番号変更完了';
case USER_INFO_UPDATE_ORDER_APPROVE = '利用者情報変更完了';
case ENTRY_APPROVE = '申込受付';
case ENTRY_PAYMENT_COMPLETE = '申込承認';
}

+ 17
- 14
app/Email/Members/EntryApprove.php Wyświetl plik

@@ -2,42 +2,45 @@

namespace App\Email\Members;

use App\Kintone\Models\Customer;
use App\Kintone\Models\SeasonTicketContract;
use App\Kintone\Models\Parking;
use App\Kintone\Models\SeasonTicketContractEntry;

class EntryApprove extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private Parking $parking,
private SeasonTicketContractEntry $entry,
) {
parent::__construct($customer);
$this->setEmail($entry->email);
parent::__construct(null);
}

public function getTemplateName(): string
{
return 'emails.members.vehicle_info_update_order_notice';
return 'emails.members.entry_approve';
}

public function getSubject(): string
{
return "車両番号・防犯登録番号変更受付のお知らせ";
return "【利用確認事項】申込受付 月極定期駐車場ナビ";
}

public function getMemberParams(): array
{
return [
'customer_name_kana' => $this->customer->customerNameKana,
'parking_name' => '##TODO##',
'customer_name' => $this->entry->customerName,
'customer_name_kana' => $this->entry->customerNameKana,
'parking_name' => $this->entry->parkingName,
'type_name' => '##TODO##',
'season_ticket_select' => '##TODO##',
'plan_name' => '##TODO##',
'vehicle_no' => '##TODO##',
'use_start_date' => '##TODO##',
'payment_method' => '##TODO##',
'vehicle_no' => $this->entry->vehicleNo,
'use_start_date' => $this->entry->useStartDate->format('Y/m/d'),
'payment_method' => $this->entry->paymentMethod,
'amount' => '##TODO##',
'can_terminate_15' => true,
'can_terminate_end_of_month' => true,
'can_terminate_15' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_15, $this->parking->canTerminateDate),
'can_terminate_end_of_month' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH, $this->parking->canTerminateDate),
];
}
}

+ 15
- 12
app/Email/Members/EntryPaymentComplete.php Wyświetl plik

@@ -2,17 +2,18 @@

namespace App\Email\Members;

use App\Kintone\Models\Customer;
use App\Kintone\Models\SeasonTicketContract;
use App\Kintone\Models\Parking;
use App\Kintone\Models\SeasonTicketContractEntry;

class EntryPaymentComplete extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private Parking $parking,
private SeasonTicketContractEntry $entry,
) {
parent::__construct($customer);
$this->setEmail($entry->email);
parent::__construct(null);
}

public function getTemplateName(): string
@@ -28,16 +29,18 @@ class EntryPaymentComplete extends Members
public function getMemberParams(): array
{
return [
'customer_name_kana' => $this->customer->customerNameKana,
'parking_name' => '##TODO##',
'customer_name' => $this->entry->customerName,
'customer_name_kana' => $this->entry->customerNameKana,
'parking_name' => $this->entry->parkingName,
'type_name' => '##TODO##',
'season_ticket_select' => '##TODO##',
'plan_name' => '##TODO##',
'vehicle_no' => '##TODO##',
'use_start_date' => '##TODO##',
'payment_method' => '##TODO##',
'vehicle_no' => $this->entry->vehicleNo,
'use_start_date' => $this->entry->useStartDate->format('Y/m/d'),
'payment_method' => $this->entry->paymentMethod,
'amount' => '##TODO##',
'can_terminate_15' => true,
'can_terminate_end_of_month' => true,
'can_terminate_15' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_15, $this->parking->canTerminateDate),
'can_terminate_end_of_month' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH, $this->parking->canTerminateDate),
];
}
}

+ 7
- 5
app/Email/Members/Members.php Wyświetl plik

@@ -8,16 +8,18 @@ use App\Kintone\Models\Customer;
abstract class Members extends BaseEmailer
{

public function __construct(protected Customer $customer)
public function __construct(protected ?Customer $customer)
{
$this->setEmail($customer->email);
if ($customer !== null) {
$this->setEmail($customer->email);
}
}

public function getParams(): array
{
return array_merge($this->getMemberParams(), [
'customer_name' => $this->customer->customerName
]);
return array_merge([
'customer_name' => $this->customer ? $this->customer->customerName : "",
], $this->getMemberParams());
}

abstract public function getMemberParams(): array;


+ 5
- 2
app/Email/Members/ParkingCertificateOrderNotice.php Wyświetl plik

@@ -10,10 +10,13 @@ class ParkingCertificateOrderNotice extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private ParkingCertificateApplication $app
private ParkingCertificateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/SeasonTicketReOrderNotice.php Wyświetl plik

@@ -10,10 +10,13 @@ class SeasonTicketReOrderNotice extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private SeasonTicketReOrderApplication $app
private SeasonTicketReOrderApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/StickerReOrderNotice.php Wyświetl plik

@@ -10,10 +10,13 @@ class StickerReOrderNotice extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private StickerReOrderApplication $app
private StickerReOrderApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/TerminateOrderApprove.php Wyświetl plik

@@ -10,10 +10,13 @@ class TerminateOrderApprove extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private TerminateApplication $app
private TerminateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/TerminateOrderComplete.php Wyświetl plik

@@ -10,10 +10,13 @@ class TerminateOrderComplete extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private TerminateApplication $app
private TerminateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/TerminateOrderNotice.php Wyświetl plik

@@ -10,10 +10,13 @@ class TerminateOrderNotice extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private TerminateApplication $app
private TerminateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/UserInfoUpdateOrderApprove.php Wyświetl plik

@@ -10,10 +10,13 @@ class UserInfoUpdateOrderApprove extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private UserInfoUpdateApplication $app
private UserInfoUpdateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/UserInfoUpdateOrderNotice.php Wyświetl plik

@@ -9,9 +9,12 @@ class UserInfoUpdateOrderNotice extends Members
{

public function __construct(
protected Customer $customer,
private UserInfoUpdateApplication $app
private UserInfoUpdateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/VehicleInfoUpdateOrderApprove.php Wyświetl plik

@@ -10,10 +10,13 @@ class VehicleInfoUpdateOrderApprove extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private VehicleInfoUpdateApplication $app
private VehicleInfoUpdateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 5
- 2
app/Email/Members/VehicleInfoUpdateOrderNotice.php Wyświetl plik

@@ -10,10 +10,13 @@ class VehicleInfoUpdateOrderNotice extends Members
{

public function __construct(
protected Customer $customer,
private SeasonTicketContract $seasonTicketContract,
private VehicleInfoUpdateApplication $app
private VehicleInfoUpdateApplication $app,
protected ?Customer $customer = null,
) {
if ($customer === null) {
$customer = $app->getCustomer();
}
parent::__construct($customer);
}



+ 141
- 0
app/Http/Controllers/Web/Email/EmailSendController.php Wyświetl plik

@@ -0,0 +1,141 @@
<?php

namespace App\Http\Controllers\Web\Email;

use App\Codes\Email;
use App\Email\BaseEmailer;
use App\Email\Members\EntryApprove;
use App\Email\Members\EntryPaymentComplete;
use App\Email\Members\TerminateOrderApprove;
use App\Email\Members\UserInfoUpdateOrderApprove;
use App\Email\Members\VehicleInfoUpdateOrderApprove;
use App\Http\Controllers\Web\WebController;
use App\Kintone\Models\SeasonTicketContract;
use App\Kintone\Models\SeasonTicketContractEntry;
use App\Kintone\Models\TerminateApplication;
use App\Kintone\Models\UserInfoUpdateApplication;
use App\Kintone\Models\VehicleInfoUpdateApplication;
use App\Logic\EmailManager;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use LogicException;

class EmailSendController extends WebController
{
private BaseEmailer|null $email = null;

private EmailManager|null $emailManager = null;

public function name(): string
{
return "メール送信依頼";
}

public function description(): string
{
return "メール送信依頼を登録する";
}


public function __construct(protected EmailSendParam $param)
{
parent::__construct();
}

protected function run(Request $request): JsonResponse
{
try {
// トークンチェック
$this->checkToken();

// メール作成
$this->getEmail();

// 送信
if ($this->emailManager === null) {
throw new LogicException("EmailManager不正");
}
$this->emailManager->confirm();
} catch (Exception $e) {
logger($e->getMessage());
logger($e->getFile());
logger($e->getLine());
return $this->failed();
}

return $this->success();
}

private function success()
{
return response()->json([
'result' => 'SUCCESS'
]);
}

private function failed()
{
return response()->json([
'result' => 'FAILED'
]);
}

private function checkToken()
{

$currectToken = config('mail.emailSendOrderToken');

if ($this->param->token !== $currectToken) {
logs()->warning("Email送信依頼トークン不正");
throw new Exception("Email送信依頼トークン不正");
}
}

private function getEmail()
{
$emailId = $this->param->emailId;

if ($emailId === Email::TERMINATE_ORDER_APPROVE) {
$application = TerminateApplication::findByApplicationNo($this->param->applicationNo);
$seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
$this->setEmail(new TerminateOrderApprove($seasonTicketContract, $application));
return;
}
if ($emailId === Email::VEHICLE_INFO_UPDATE_ORDER_APPROVE) {
$application = VehicleInfoUpdateApplication::findByApplicationNo($this->param->applicationNo);
$seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
$this->setEmail(new VehicleInfoUpdateOrderApprove($seasonTicketContract, $application));
return;
}
if ($emailId === Email::USER_INFO_UPDATE_ORDER_APPROVE) {
$application = UserInfoUpdateApplication::findByApplicationNo($this->param->applicationNo);
$seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
$this->setEmail(new UserInfoUpdateOrderApprove($seasonTicketContract, $application));
return;
}
if ($emailId === Email::ENTRY_APPROVE) {
$entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo);
$parking = $entry->getParking();
$this->setEmail(new EntryApprove($parking, $entry));
return;
}
if ($emailId === Email::ENTRY_PAYMENT_COMPLETE) {
$entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo);
$parking = $entry->getParking();
$this->setEmail(new EntryPaymentComplete($parking, $entry));
return;
}


if ($this->email === null || $this->emailManager === null) {
throw new LogicException("setEmail不正");
}
}

private function setEmail(BaseEmailer $email)
{
$this->email = $email;
$this->emailManager = new EmailManager($email);
}
}

+ 26
- 0
app/Http/Controllers/Web/Email/EmailSendParam.php Wyświetl plik

@@ -0,0 +1,26 @@
<?php

namespace App\Http\Controllers\Web\Email;

use App\Codes\Email;
use App\Http\Controllers\Web\BaseParam;
use Illuminate\Validation\Rules\Enum;

/**
* @property Email emailId
* @property ?string token
* @property ?string seasonTicketContractEntryRecordNo
* @property ?string applicationNo
*/
class EmailSendParam extends BaseParam
{
public function rules(): array
{
return [
'email_id' => $this->enum([new Enum(Email::class)]),
'token' => $this->str(true),
'season_ticket_contract_entry_record_no' => $this->str(true),
'application_no' => $this->str(true),
];
}
}

+ 1
- 1
app/Http/Controllers/Web/SeasonTicketContract/ParkingCertificateOrderController.php Wyświetl plik

@@ -65,7 +65,7 @@ class ParkingCertificateOrderController extends WebController
$application->memo = $param->memo;

// メール送信
$email = new ParkingCertificateOrderNotice($customer, $seasonTicketContract, $application);
$email = new ParkingCertificateOrderNotice($seasonTicketContract, $application, $customer);
$email->setUser(Auth::user());
$emailMmanager = new EmailManager($email);
$emailMmanager->confirm();


+ 1
- 1
app/Http/Controllers/Web/SeasonTicketContract/SeasonTicketReOrderController.php Wyświetl plik

@@ -54,7 +54,7 @@ class SeasonTicketReOrderController extends WebController
$application->memo = $param->memo;

// メール送信
$email = new SeasonTicketReOrderNotice($customer, $seasonTicketContract, $application);
$email = new SeasonTicketReOrderNotice($seasonTicketContract, $application, $customer);
$email->setUser(Auth::user());
$emailMmanager = new EmailManager($email);
$emailMmanager->confirm();


+ 1
- 1
app/Http/Controllers/Web/SeasonTicketContract/StickerReOrderController.php Wyświetl plik

@@ -55,7 +55,7 @@ class StickerReOrderController extends WebController
$application->memo = $param->memo;

// メール送信
$email = new StickerReOrderNotice($customer, $seasonTicketContract, $application);
$email = new StickerReOrderNotice($seasonTicketContract, $application, $customer);
$email->setUser(Auth::user());
$emailMmanager = new EmailManager($email);
$emailMmanager->confirm();


+ 1
- 1
app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderController.php Wyświetl plik

@@ -57,7 +57,7 @@ class TerminationOrderController extends WebController
$application->memo = $param->memo;

// メール送信
$email = new TerminateOrderNotice($customer, $seasonTicketContract, $application);
$email = new TerminateOrderNotice($seasonTicketContract, $application, $customer);
$email->setUser(Auth::user());
$emailMmanager = new EmailManager($email);
$emailMmanager->confirm();


+ 10
- 0
app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderOptionsController.php Wyświetl plik

@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Web\SeasonTicketContract;

use App\Http\Controllers\Web\WebController;
use App\Kintone\Models\SeasonTicketContract;
use App\Util\DateUtil;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -33,6 +34,15 @@ class TerminationOrderOptionsController extends WebController

$monthes = [];

// $seasonTicketContract = SeasonTicketContract::find($param->seasonTicketContractRecordNo);

// $parking = $seasonTicketContract->getParking();

// $today = DateUtil::now();

// $canEndOfMonth = $parking->


foreach (range(0, 3) as $m) {
$target = DateUtil::now()->addMonth($m)->endOfMonth();
$monthes[] = $target->format('Y/m/d');


+ 1
- 1
app/Http/Controllers/Web/SeasonTicketContract/UpdateVehicleInfoOrderController.php Wyświetl plik

@@ -58,7 +58,7 @@ class UpdateVehicleInfoOrderController extends WebController
$application->memo = $param->memo;

// メール送信
$email = new VehicleInfoUpdateOrderNotice($customer, $seasonTicketContract, $application);
$email = new VehicleInfoUpdateOrderNotice($seasonTicketContract, $application, $customer);
$email->setUser(Auth::user());
$emailMmanager = new EmailManager($email);
$emailMmanager->confirm();


+ 5
- 3
app/Kintone/KintoneAccess.php Wyświetl plik

@@ -19,6 +19,7 @@ class KintoneAccess
{

private string $appName;
private ?string $modelName;
private string $host;
private string $apiToken = "";
private int $appId;
@@ -43,9 +44,10 @@ class KintoneAccess
private const URL_APP_FORM_FIELDS = "/k/v1/app/form/fields.json";


public function __construct(string $appName)
public function __construct(string $appName, ?string $modelName)
{
$this->appName = $appName;
$this->modelName = $modelName;

$key = "kintone.host";
$host = config($key);
@@ -118,7 +120,7 @@ class KintoneAccess
throw $e;
}
}
$result = new $this->appName();
$result = $this->modelName ? new $this->modelName() : new $this->appName();

$result->setDataFromRecordResponse($response['record']);
return $result;
@@ -157,7 +159,7 @@ class KintoneAccess
/**
* @var KintoneModel $model
*/
$model = new $this->appName();
$model = $this->modelName ? new $this->modelName() : new $this->appName();

$model->setDataFromRecordResponse($data);
$ret->put($model->getRecordId(), $model);


+ 5
- 0
app/Kintone/Models/Customer.php Wyświetl plik

@@ -51,4 +51,9 @@ class Customer extends KintoneModel
{
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));
}
}

+ 10
- 0
app/Kintone/Models/GeneralApplication.php Wyświetl plik

@@ -48,4 +48,14 @@ abstract class GeneralApplication extends KintoneModel
SeasonTicketContract::class,
Customer::class,
];

public static function findByApplicationNo(string $applicationNo): static
{
return static::getAccess()->first(static::getQuery()->where(static::FIELD_APPLICATION_NO, $applicationNo));
}

public function getCustomer(): Customer
{
return Customer::findByCustomerCode($this->customerCode);
}
}

+ 1
- 1
app/Kintone/Models/KintoneModel.php Wyświetl plik

@@ -62,7 +62,7 @@ abstract class KintoneModel
return $store->get($target);
}

$access = new KintoneAccess($target);
$access = new KintoneAccess($target, static::class);
$access->setFields(array_keys(static::FIELDS));

foreach (static::RELATIONS as $relation) {


+ 26
- 1
app/Kintone/Models/Parking.php Wyświetl plik

@@ -2,19 +2,35 @@

namespace App\Kintone\Models;

use App\Util\DateUtil;
use Illuminate\Support\Carbon;

/**
* アプリ名 定期駐車場マスタ
* @property string $parkingName
* @property string parkingName
* @property array canTerminateDate
* @property array canTerminateRule
*/
class Parking extends KintoneModel
{
const CONFIG_KEY = "KINTONE_APP_PARKING";

const FIELD_PARKING_NAME = "駐車場名";
const FIELD_CAN_TERMINATE_DATE = "解約可能日";
const FIELD_CAN_TERMINATE_RULE = "解約ルール";


const ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH = "末日";
const ELEMENT_CAN_TERMINATE_DATE_15 = "15日";

const ELEMENT_CAN_TERMINATE_RULE_UNTIL_10 = "10日まで申込は当月可";
const ELEMENT_CAN_TERMINATE_RULE_TODAY = "当日解約可";

protected const FIELDS = [
...parent::FIELDS,
self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT,
self::FIELD_CAN_TERMINATE_DATE => FieldType::CHECK_BOX,
self::FIELD_CAN_TERMINATE_RULE => FieldType::CHECK_BOX,
];

protected const FIELD_NAMES = [
@@ -26,4 +42,13 @@ class Parking extends KintoneModel
{
return static::getAccess()->first(static::getQuery()->where(static::FIELD_PARKING_NAME, $parkingName));
}

public function canTerminateDateEndOfMonth(): bool
{
return in_array(self::ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH, $this->canTerminateDate);
}
public function canTerminateDate15(): bool
{
return in_array(self::ELEMENT_CAN_TERMINATE_DATE_15, $this->canTerminateDate);
}
}

+ 12
- 0
app/Kintone/Models/SeasonTicketContract.php Wyświetl plik

@@ -6,7 +6,9 @@ use LogicException;

/**
* アプリ名 車室情報管理
* @property string customerCode
* @property string seasonTicketSeqNo
* @property string parkingName
* @property string vehicleNo
* @property string registerNo
*/
@@ -59,4 +61,14 @@ class SeasonTicketContract extends KintoneModel
self::FIELD_STUDENT_LICENSE_IMAGES_UPLOAD_DATETIME => 'student_license_images_upload_datetime',
self::FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME => 'other_license_images_upload_datetime',
];

public function getParking(): Parking
{
return Parking::findByParkingName($this->parkingName);
}

public function getCustomer(): Customer
{
return Customer::findByCustomerCode($this->customerCode);
}
}

+ 54
- 0
app/Kintone/Models/SeasonTicketContractEntry.php Wyświetl plik

@@ -0,0 +1,54 @@
<?php

namespace App\Kintone\Models;

use Illuminate\Support\Carbon;

/**
* アプリ名 定期申込・予約
* @property string parkingName
* @property string customerName
* @property string customerNameKana
* @property string phoneNo
* @property string address
* @property string email
* @property Carbon useStartDate
* @property string vehicleNo
* @property string paymentMethod
*/
class SeasonTicketContractEntry extends KintoneModel
{
const CONFIG_KEY = "KINTONE_APP_SEASON_TICEKT_CONTRACT_ENTRY";

const FIELD_PARKING_NAME = "駐車場";
const FIELD_CUSTOMER_NAME = "氏名";
const FIELD_CUSTOMER_NAME_KANA = "フリガナ";
const FIELD_PHONE_NO = "電話番号";
const FIELD_ADDRESS = "住所";
const FIELD_EMAIL = "メールアドレス";
const FIELD_USE_START_DATE = "利用開始希望日";
const FIELD_VEHICLE_NO = "車両番号";
const FIELD_PAYMENT_METHOD = "支払方法";

protected const FIELDS = [
...parent::FIELDS,
self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT,
self::FIELD_CUSTOMER_NAME => FieldType::SINGLE_LINE_TEXT,
self::FIELD_CUSTOMER_NAME_KANA => FieldType::SINGLE_LINE_TEXT,
self::FIELD_PHONE_NO => FieldType::SINGLE_LINE_TEXT,
self::FIELD_ADDRESS => FieldType::SINGLE_LINE_TEXT,
self::FIELD_EMAIL => FieldType::SINGLE_LINE_TEXT,
self::FIELD_USE_START_DATE => FieldType::DATE,
self::FIELD_VEHICLE_NO => FieldType::SINGLE_LINE_TEXT,
self::FIELD_PAYMENT_METHOD => FieldType::DROP_DOWN,
];

protected const FIELD_NAMES = [
...parent::FIELD_NAMES,
];

public function getParking(): Parking
{
return Parking::findByParkingName($this->parkingName);
}
}

+ 3
- 0
app/Providers/RouteServiceProvider.php Wyświetl plik

@@ -30,6 +30,9 @@ class RouteServiceProvider extends ServiceProvider
Route::middleware('web')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('api')
->prefix('api-email')
->group(base_path('routes/api_email.php'));

Route::middleware('web')
->group(base_path('routes/web.php'));


+ 1
- 0
config/kintone.php Wyświetl plik

@@ -29,6 +29,7 @@ return [
...App\Kintone\Models\Customer::setConfig(),
...App\Kintone\Models\Parking::setConfig(),
...App\Kintone\Models\SeasonTicketContract::setConfig(),
...App\Kintone\Models\SeasonTicketContractEntry::setConfig(),
...App\Kintone\Models\PaymentPlan::setConfig(),
...App\Kintone\Models\GeneralApplication::setConfig(),
...App\Kintone\Models\FAQ::setConfig(),


+ 3
- 1
config/mail.php Wyświetl plik

@@ -123,6 +123,8 @@ return [
],
],

'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT')
'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'),

'emailSendOrderToken' => env('MAIL_SEND_ORDER_TOKEN'),

];

+ 1
- 1
resources/views/emails/members/entry_approve.blade.php Wyświetl plik

@@ -1,4 +1,4 @@
@extends('emails.layouts.members')
@extends('emails.layouts.member')

@section('contents')
定期利用取扱事項を同意のうえ、定期利用申込みを頂き誠にありがとうございます。


+ 16
- 0
routes/api_email.php Wyświetl plik

@@ -0,0 +1,16 @@
<?php

use App\Util\RouteHelper;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/

RouteHelper::post('/send', App\Http\Controllers\Web\Email\EmailSendController::class);

Ładowanie…
Anuluj
Zapisz