Laravel とある予約システムの 共通関数部分のメモ 01

## Laravel 共通 or 関数部分のメモ

・とある予約システムで使用しました、Laravelの共通の関数や、個別関数をまとめたファイル 01をメモです。

```php:Utils.php
<?php

namespace App\Library;

use Carbon\Carbon;
use Carbon\CarbonImmutable;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;


class Utils
{

    private $now_date;
    private $format;

    // ============== 日付関数 当日を返す ==================
    public function Get_Format_date($date, $format)
    {
        $carbon_day = new Carbon($date);
        $get_today = $carbon_day->isoFormat($format);
        return $get_today;
    }

    /*
    *  // 火葬枠番号　返す
    */
    public function Get_Kasou_Waku($waku): string
    {

        $arr = ["9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00"];
        $idx = 0;
        $resurl_waku = "";
        foreach ($arr as $a) {
            if (strcmp($a, $waku) == 0) {
                $resurl_waku = $idx;
            }
            $idx += 1;
        }
        return $resurl_waku + 1;
    }

    /*
    *  火葬枠　テーブルから　取得
    */
    public function Get_Kasou_Waku_table()
    {
        $bindParam = [];

        $sql = <<< SQL
        SELECT  火葬枠番号 , 火葬枠名 , 予約枠数 , 予約時刻 
	        FROM 火葬枠
SQL;

        $get_wakusuu = DB::select($sql);

        $arr_kasouWaku_num = [];   // 火葬枠番号
        $arr_kasouWaku_name = [];  // 火葬枠名
        $arr_kasouWaku_suu = [];   // 予約枠数
        $arr_kasouWaku_time = [];  // 予約時刻

        for ($i = 0; $i < count($get_wakusuu); $i++) {
            $arr_kasouWaku_num[$i] = $get_wakusuu[$i]->{"火葬枠番号"};
            $arr_kasouWaku_name[$i] = $get_wakusuu[$i]->{"火葬枠名"};
            $arr_kasouWaku_suu[$i] = $get_wakusuu[$i]->{"予約枠数"};
            $arr_kasouWaku_time[$i] = $get_wakusuu[$i]->{"予約時刻"};
        }

        // === 900 => 9:00 , 1000 => 10:00
        for ($i = 0; $i < count($arr_kasouWaku_time); $i++) {
            if ($i == 0) {
                $arr_kasouWaku_time[$i] = substr_replace($arr_kasouWaku_time[$i], ':00', 1);
            } else {
                $arr_kasouWaku_time[$i] = substr_replace($arr_kasouWaku_time[$i], ':00', 2);
            }
        }

        $sql = <<< SQL
        select 予約日,火葬枠番号,count(火葬枠番号) as 枠合計 from 火葬受付 
	where 予約日 > NOW() and 予約日 <= (NOW() + interval 7 DAY)
	group by 火葬枠番号, 予約日
SQL;

        $get_yoyaku_week_data = DB::select($sql);

        $yoyaku_week_data_yoyakubi = [];
        $yoyaku_week_data_kwaku = [];
        $yoyaku_week_waku_sum = [];

        for ($i = 0; $i < count($get_yoyaku_week_data); $i++) {
            $yoyaku_week_data_yoyakubi[$i] = $get_yoyaku_week_data[$i]->{"予約日"};
            $yoyaku_week_data_kwaku[$i] = $get_yoyaku_week_data[$i]->{"火葬枠番号"};
            $yoyaku_week_waku_sum[$i] = $get_yoyaku_week_data[$i]->{"枠合計"};
        }

        $get_kasou_data = [
            'arr_kasouWaku_num' => $arr_kasouWaku_num,
            'arr_kasouWaku_name' => $arr_kasouWaku_name,
            'arr_kasouWaku_suu' => $arr_kasouWaku_suu,
            'arr_kasouWaku_time' => $arr_kasouWaku_time,
            'yoyaku_week_data_yoyakubi' => $yoyaku_week_data_yoyakubi,
            'yoyaku_week_data_kwaku' => $yoyaku_week_data_kwaku,
            'yoyaku_week_waku_sum' => $yoyaku_week_waku_sum,
        ];

        return $get_kasou_data;
    }


    /*
     ======   採番テーブル 「現在値」 マックス値　取得 =======
    */
    public function Get_Saiban_Max()
    {

        // === パラメーター（年度取得） その年の年度

        $now_year = new Carbon();
        $now_year = Carbon::setLocale('ja');
        $now_year = Carbon::now()->format('Y');

        $bindParam = [
            'now_year' => $now_year,
        ];

        $sql = <<< SQL
SELECT 採番名, MAX(現在値) as 現在, 年度 FROM 採番 
	group by 年度 having 採番名 = '予約番号' and 年度 = :now_year
SQL;

        $get_saiban = DB::select($sql, $bindParam);
        $get_saiban_num = $get_saiban[0]->{"現在"};

        $get_arr = [
            'get_saiban_num' => $get_saiban_num,
        ];

        return $get_arr;
    }

    /**
     *  和暦を返す
     */
    public function Get_Wareki($year): array
    {

        $eras = [
            ['year' => 2019, 'name' => '令和', 'new_Japanese_calendar' => '平成31年度'],
        ];

        $get_wareki = "";
        $get_wa_nendo = 0;

        // ======= 和暦 取得 
        foreach ($eras as $era) {
            // === 元年処理
            if ($year == $era['year']) {
                $get_wareki = $era['new_Japanese_calendar'];
            }

            // === 元年以外
            if ($year >= $era['year']) {
                $get_wareki = $era['name'];
                $get_wa_nendo = $year - $era['year'] + 1;
            }

            return [
                'get_wareki' => $get_wareki,
                'get_wa_nendo' => $get_wa_nendo
            ];
        } // ========= END foreach
    }

    /**
     *  日付　2022-08-08　の 月　日　を返す 0 => 08 , 1 => 8
     */
    public function Get_Month_Day($to_date, $opt): array
    {
        // === ２桁で返す
        if ($opt == 0) {
            // 01
            $month = mb_substr($to_date, 5, 2);
            $day = mb_substr($to_date, 8, 2);
            return [
                "month" => $month,
                "day" => $day
            ];

            // === １桁で返す
        } else {
            $s_month = mb_substr($to_date, 5, 2);
            $s_day = mb_substr($to_date, 8, 2);

            if (substr($s_month, 0, 1) === "0") {
                $month = substr_replace($s_month, "", 0, 1);
            }

            if (substr($s_day, 0, 1) === "0") {
                $day = substr_replace($s_day, "", 0, 1);
            } else {
                $day = $s_day;
            }

            return [
                "month" => $month,
                "day" => $day,
            ];
        }
    }

    /**
     *  斎場名、　斎場FAX番号　を取得する。 初期設定テーブル
     */
    public function Get_Saijou_Mei_Fax(): array
    {

        $sql = <<< SQL
       SELECT 斎場名, 斎場ＦＡＸ FROM 初期設定 WHERE 斎場名 = 'メモリアルトネ'
SQL;

        $get_pdf_syoki = DB::select($sql);

        $pdf_view_saijou_name = $get_pdf_syoki[0]->{"斎場名"};
        $pdf_viwe_fax = $get_pdf_syoki[0]->{"斎場ＦＡＸ"};

        return [
            "pdf_view_saijou_name" => $pdf_view_saijou_name,
            "pdf_viwe_fax" => $pdf_viwe_fax,
        ];
    }

    /**
     *  固定電話　、　スマホ（頭 ３桁）で（-） を分岐させる
     */
    public function Tel_Haifun_Change($str): string
    {

        if (
            substr($str, 0, 3) == "090" || substr($str, 0, 3) == "080" ||
            substr($str, 0, 3) == "070" || substr($str, 0, 3) == "050"
        ) {
            // === 頭　３桁の場合
            $str1 = substr($str, 0, 3);
            $str2 = substr($str, 3, 4);
            $str3 = substr($str, 7, 11);

            $change_tel = $str1 . "-" . $str2 . "-" . $str3;
            return $change_tel;
        } else {
            // === 頭　４桁　（固定電話）の場合
            $str1 = substr($str, 0, 4);
            $str2 = substr($str, 4, 2);
            $str3 = substr($str, 6, 4);

            $change_tel = $str1 . "-" . $str2 . "-" . $str3;
            return $change_tel;
        }
    } // ========= Tel_Haifun_Change() END 

    /**
     *  郵便番号 (-) ハイフン　を付ける
     */
    public function Yuubin_Haifun($str): string
    {
        $str1 = substr($str, 0, 3);
        $str2 = substr($str, 3, 7);

        $change_yuubin = $str1 . "-" . $str2;
        return $change_yuubin;
    }
}
```