public function save(Request $request)
 {
     if (!$this->hasPermission($this->menuPermissionName)) {
         return view($this->viewPermissiondeniedName);
     }
     $this->validate($request, ['bookno' => 'required', 'no' => 'required', 'date' => 'required', 'bookingcustomerid' => 'required_if:customer-type,0', 'bookingcustomerfirstname' => 'required_if:customer-type,1', 'bookingcustomerphone1' => 'required', 'carobjectivetype' => 'required', 'carmodelid' => 'required', 'carsubmodelid' => 'required', 'colorid' => 'required', 'pricelistid' => 'required', 'discount' => 'required', 'subdown' => 'required', 'accessories' => 'required', 'cashpledge' => 'required', 'cashpledgepaymenttype' => 'required', 'cashpledgechargepercent' => 'required_if:cashpledgepaymenttype,1', 'purchasetype' => 'required', 'finacecompanyid' => 'required_if:purchasetype,1', 'interestratetypeid' => 'required_if:purchasetype,1', 'interestratemode' => 'required_if:purchasetype,1', 'interest' => 'required_if:purchasetype,1', 'down' => 'required_if:purchasetype,1', 'subsidise' => 'required_if:purchasetype,1', 'installments' => 'required_if:purchasetype,1', 'cashpledgeredlabel' => 'required_if:carobjectivetype,0', 'registrationtype' => 'required_if:carobjectivetype,0', 'registrationfee' => 'required_if:carobjectivetype,0', 'insurancefee' => 'required', 'compulsorymotorinsurancefee' => 'required', 'accessoriesfee' => 'required', 'giveawaywithholdingtax' => 'required', 'otherfee' => 'required', 'otherfee2' => 'required', 'otherfee3' => 'required', 'implementfee' => 'required', 'datewantgetcar' => 'required', 'giveawayadditionalcharges' => 'required', 'buyercustomerid' => 'required_if:buyertype,1', 'buyercustomerfirstname' => 'required_if:buyertype,2', 'buyercustomerphone1' => 'required_if:buyertype,1,2', 'salesmanemployeeid' => 'required', 'salesmanageremployeeid' => 'required', 'approversemployeeid' => 'required', 'approvaldate' => 'required', 'customertype' => 'required'], ['bookno.required' => 'ข้อมูล เล่มที่ จำเป็นต้องกรอก', 'no.required' => 'ข้อมูล เลขที่ จำเป็นต้องกรอก', 'date.required' => 'ข้อมูล วันที่ จำเป็นต้องกรอก', 'bookingcustomerid.required_if' => 'ผู้สั่งจอง กรุณาเลือกชื่อลูกค้า', 'bookingcustomerfirstname.required_if' => 'ผู้สั่งจอง ชื่อ จำเป็นต้องกรอก', 'bookingcustomerphone1.required' => 'ผู้สั่งจอง เบอร์โทร 1 จำเป็นต้องกรอก', 'carobjectivetype.required' => 'รายละเอียดรถยนตร์ใหม่ รถใหม่/รถบริษัท จำเป็นต้องเลือก', 'carmodelid.required' => 'รายละเอียดรถยนตร์ใหม่ กรุณาเลือกแบบ', 'carsubmodelid.required' => 'รายละเอียดรถยนตร์ใหม่ กรุณาเลือกรุ่น', 'colorid.required' => 'รายละเอียดรถยนตร์ใหม่ กรุณาเลือกสี', 'pricelistid.required' => 'รายละเอียดรถยนตร์ใหม่ กรุณาเลือกราคา', 'discount.required' => 'รายละเอียดรถยนตร์ใหม่ ส่วนลด จำเป็นต้องกรอก', 'subdown.required' => 'รายละเอียดรถยนตร์ใหม่ Sub Down จำเป็นต้องกรอก', 'accessories.required' => 'รายละเอียดรถยนตร์ใหม่ บวกอุปกรณ์ จำเป็นต้องกรอก', 'cashpledge.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน เงินมัดจำ จำเป็นต้องกรอก', 'cashpledgepaymenttype.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ประเภทการจ่ายเงินมัดจำ จำเป็นต้องเลือก', 'cashpledgechargepercent.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน % ค่าธรรมเนียม จำเป็นต้องเลือก', 'purchasetype.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ประเภทซื้อรถยนต์ จำเป็นต้องเลือก', 'finacecompanyid.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ชื่อบริษัทเช่าซื้อ จำเป็นต้องเลือก', 'interestratetypeid.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ประเภทอัตราดอกเบี้ย จำเป็นต้องเลือก', 'interestratemode.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน Mode อัตราดอกเบี้ย จำเป็นต้องเลือก', 'interest.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ดอกเบี้ย จำเป็นต้องกรอก', 'down.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ดาวน์ จำเป็นต้องกรอก', 'installments.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน จำนวนงวด จำเป็นต้องกรอก', 'cashpledgeredlabel.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่ามัดจำป้ายแดง จำเป็นต้องกรอก', 'registrationtype.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ประเภทจดทะเบียน จำเป็นต้องเลือก', 'registrationfee.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าจดทะเบียน จำเป็นต้องกรอก', 'insurancefee.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าประกันภัย จำเป็นต้องกรอก', 'compulsorymotorinsurancefee.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่า พ.ร.บ. จำเป็นต้องกรอก', 'accessoriesfee.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าอุปกรณ์ จำเป็นต้องกรอก', 'giveawaywithholdingtax.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ภาษีหัก ณ ที่จ่าย (กรณีลูกค้าได้รับของแถม เช่น ทอง) จำเป็นต้องกรอก', 'otherfee.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าอื่นๆ (1) จำเป็นต้องกรอก', 'otherfee2.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าอื่นๆ (2) จำเป็นต้องกรอก', 'otherfee3.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าอื่นๆ (3) จำเป็นต้องกรอก', 'subsidise.required_if' => 'รายละเอียด/เงื่อนไขการชำระเงิน SUBSIDISE จำเป็นต้องกรอก', 'implementfee.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน ค่าดำเนินการ จำเป็นต้องกรอก', 'datewantgetcar.required' => 'รายละเอียด/เงื่อนไขการชำระเงิน วันที่ต้องการรับรถ จำเป็นต้องกรอก', 'giveawayadditionalcharges.required' => 'รายละเอียดอื่นๆ ลูกค้าจ่ายเพิ่มเติ่มค่าของแถม จำเป็นต้องกรอก', 'buyercustomerid.required_if' => 'ผู้ซื้อ กรุณาเลือกชื่อลูกค้า', 'buyercustomerfirstname.required_if' => 'ผู้ซื้อ ชื่อ จำเป็นต้องกรอก', 'buyercustomerphone1.required_if' => 'ผู้ซื้อ เบอร์โทร 1 จำเป็นต้องกรอก', 'salesmanemployeeid.required' => 'พนักงานขาย กรุณาเลือกชื่อพนักงาน', 'salesmanageremployeeid.required' => 'ผู้จัดการฝ่ายขาย กรุณาเลือกชื่อพนักงาน', 'approversemployeeid.required' => 'ผู้อนุมัติ กรุณาเลือกชื่อพนักงาน', 'approvaldate.required' => 'วันที่อนุมัติ จำเป็นต้องกรอก', 'customertype.required' => 'ประเภทลูกค้า จำเป็นต้องเลือก']);
     $input = $request->all();
     if ($request->has('id')) {
         $model = CarPreemption::find($input['id']);
         if ($model == null) {
             return "ขออภัย!! ไม่พบข้อมูลที่จะทำการแก้ไขในระบบ เนื่องจากอาจถูกลบไปแล้ว";
         }
     } else {
         $model = new CarPreemption();
     }
     $model->bookno = $input['bookno'];
     $model->no = $input['no'];
     $model->date = date('Y-m-d', strtotime($input['date']));
     if ($input['customer-type'] == 0) {
         $customer = Customer::find($input['bookingcustomerid']);
     } else {
         $customer = new Customer();
         if (Auth::user()->isadmin) {
             $customer->provinceid = $input['provincebranchid'];
         } else {
             $customer->provinceid = Auth::user()->provinceid;
         }
         $customer->title = $input['bookingcustomertitle'];
         $customer->firstname = $input['bookingcustomerfirstname'];
         $customer->lastname = $input['bookingcustomerlastname'];
     }
     $customer->address = $input['bookingcustomeraddress'];
     $customer->addprovinceid = $input['bookingcustomerprovinceid'];
     $customer->amphurid = $input['bookingcustomeramphurid'];
     $customer->districtid = $input['bookingcustomerdistrictid'];
     $customer->zipcode = $input['bookingcustomerzipcode'];
     $customer->phone1 = $input['bookingcustomerphone1'];
     $customer->phone2 = $input['bookingcustomerphone2'];
     $customer->occupationid = $input['bookingcustomeroccupationid'];
     if ($input['bookingcustomerbirthdate'] != null && $input['bookingcustomerbirthdate'] != '') {
         $customer->birthdate = date('Y-m-d', strtotime($input['bookingcustomerbirthdate']));
     }
     if ($customer->save()) {
         $model->bookingcustomerid = $customer->id;
     } else {
         //hack returning error
         $this->validate($request, ['bookno' => 'alpha'], ['bookno.alpha' => 'ไม่สามารถทำการบันทึกข้อมูลผู้จองได้ กรุณาติดต่อผู้ดูแลระบบ!!']);
     }
     $model->carobjectivetype = $input['carobjectivetype'];
     $model->carmodelid = $input['carmodelid'];
     $model->carsubmodelid = $input['carsubmodelid'];
     $model->colorid = $input['colorid'];
     $model->pricelistid = $input['pricelistid'];
     $model->colorprice = $input['colorprice'];
     $model->totalcarprice = $input['totalcarprice'];
     $model->discount = $input['discount'];
     $model->subdown = $input['subdown'];
     $model->accessories = $input['accessories'];
     $model->oldcarbrandid = $input['oldcarbrandid'];
     $model->oldcarmodelid = $input['oldcarmodelid'];
     $model->oldcargear = $input['oldcargear'];
     $model->oldcarcolor = $input['oldcarcolor'];
     $model->oldcarenginesize = $input['oldcarenginesize'];
     $model->oldcarlicenseplate = $input['oldcarlicenseplate'];
     $model->oldcaryear = $input['oldcaryear'];
     $model->oldcarprice = $input['oldcarprice'];
     $model->oldcarbuyername = $input['oldcarbuyername'];
     $model->oldcarother = $input['oldcarother'];
     $model->cashpledge = $input['cashpledge'];
     $model->cashpledgepaymenttype = $input['cashpledgepaymenttype'];
     $model->cashpledgechargepercent = $input['cashpledgechargepercent'];
     $model->cashpledgechargeamount = $input['cashpledgechargeamount'];
     if ($request->has('cashpledgechargefree')) {
         $model->cashpledgechargefree = $input['cashpledgechargefree'];
     } else {
         $model->cashpledgechargefree = 0;
     }
     $model->purchasetype = $input['purchasetype'];
     $model->finacecompanyid = $input['finacecompanyid'];
     $model->interestratetypeid = $input['interestratetypeid'];
     $model->interestratemode = $input['interestratemode'];
     $model->interest = $input['interest'];
     $model->down = $input['down'];
     $model->installments = $input['installments'];
     $model->financingfee = $input['financingfee'];
     $model->transferfee = $input['transferfee'];
     $model->transferoperationfee = $input['transferoperationfee'];
     $model->cashpledgeredlabel = $input['cashpledgeredlabel'];
     $model->registerprovinceid = $input['registerprovinceid'];
     $model->registrationtype = $input['registrationtype'];
     $model->registrationfee = $input['registrationfee'];
     if ($request->has('registrationfeefree')) {
         $model->registrationfeefree = $input['registrationfeefree'];
     } else {
         $model->registrationfeefree = 0;
     }
     $model->insurancefee = $input['insurancefee'];
     if ($request->has('insurancefeefree')) {
         $model->insurancefeefree = $input['insurancefeefree'];
     } else {
         $model->insurancefeefree = 0;
     }
     $model->compulsorymotorinsurancefee = $input['compulsorymotorinsurancefee'];
     if ($request->has('compulsorymotorinsurancefeefree')) {
         $model->compulsorymotorinsurancefeefree = $input['compulsorymotorinsurancefeefree'];
     } else {
         $model->compulsorymotorinsurancefeefree = 0;
     }
     $model->accessoriesfee = $input['accessoriesfee'];
     $model->giveawaywithholdingtax = $input['giveawaywithholdingtax'];
     $model->otherfee = $input['otherfee'];
     $model->otherfeedetail = $input['otherfeedetail'];
     $model->otherfee2 = $input['otherfee2'];
     $model->otherfeedetail2 = $input['otherfeedetail2'];
     $model->otherfee3 = $input['otherfee3'];
     $model->otherfeedetail3 = $input['otherfeedetail3'];
     $model->subsidise = $input['subsidise'];
     if ($request->has('subsidisefree')) {
         $model->subsidisefree = $input['subsidisefree'];
     } else {
         $model->subsidisefree = 0;
     }
     $model->implementfee = $input['implementfee'];
     if ($request->has('implementfeefree')) {
         $model->implementfeefree = $input['implementfeefree'];
     } else {
         $model->implementfeefree = 0;
     }
     $model->datewantgetcar = date('Y-m-d', strtotime($input['datewantgetcar']));
     $model->giveawayadditionalcharges = $input['giveawayadditionalcharges'];
     $model->totalfree = $input['totalfree'];
     if ($input['buyertype'] == 0) {
         $model->buyercustomerid = $model->bookingcustomerid;
     } else {
         if ($input['buyertype'] == 1) {
             $customer = Customer::find($input['buyercustomerid']);
         } else {
             $customer = new Customer();
             if (Auth::user()->isadmin) {
                 $customer->provinceid = $input['provincebranchid'];
             } else {
                 $customer->provinceid = Auth::user()->provinceid;
             }
             $customer->title = $input['buyercustomertitle'];
             $customer->firstname = $input['buyercustomerfirstname'];
             $customer->lastname = $input['buyercustomerlastname'];
         }
         $customer->address = $input['buyercustomeraddress'];
         $customer->addprovinceid = $input['buyercustomerprovinceid'];
         $customer->amphurid = $input['buyercustomeramphurid'];
         $customer->districtid = $input['buyercustomerdistrictid'];
         $customer->zipcode = $input['buyercustomerzipcode'];
         $customer->phone1 = $input['buyercustomerphone1'];
         $customer->phone2 = $input['buyercustomerphone2'];
         $customer->occupationid = $input['buyercustomeroccupationid'];
         if ($input['buyercustomerbirthdate'] != null && $input['buyercustomerbirthdate'] != '') {
             $customer->birthdate = date('Y-m-d', strtotime($input['buyercustomerbirthdate']));
         }
         if ($customer->save()) {
             $model->buyercustomerid = $customer->id;
         } else {
             //hack returning error
             $this->validate($request, ['bookno' => 'alpha'], ['bookno.alpha' => 'ไม่สามารถทำการบันทึกข้อมูลผู้ซื้อได้ กรุณาติดต่อผู้ดูแลระบบ!!']);
         }
     }
     $model->salesmanemployeeid = $input['salesmanemployeeid'];
     $model->salesmanageremployeeid = $input['salesmanageremployeeid'];
     $model->approversemployeeid = $input['approversemployeeid'];
     $model->approvaldate = date('Y-m-d', strtotime($input['approvaldate']));
     if ($request->has('place')) {
         $model->place = $input['place'];
     } else {
         $model->place = 0;
     }
     if ($request->has('showroom')) {
         $model->showroom = $input['showroom'];
     } else {
         $model->showroom = 0;
     }
     if ($request->has('booth')) {
         $model->booth = $input['booth'];
     } else {
         $model->booth = 0;
     }
     if ($request->has('leaflet')) {
         $model->leaflet = $input['leaflet'];
     } else {
         $model->leaflet = 0;
     }
     if ($request->has('businesscard')) {
         $model->businesscard = $input['businesscard'];
     } else {
         $model->businesscard = 0;
     }
     if ($request->has('invitationcard')) {
         $model->invitationcard = $input['invitationcard'];
     } else {
         $model->invitationcard = 0;
     }
     if ($request->has('phone')) {
         $model->phone = $input['phone'];
     } else {
         $model->phone = 0;
     }
     if ($request->has('signshowroom')) {
         $model->signshowroom = $input['signshowroom'];
     } else {
         $model->signshowroom = 0;
     }
     if ($request->has('spotradiowalkin')) {
         $model->spotradiowalkin = $input['spotradiowalkin'];
     } else {
         $model->spotradiowalkin = 0;
     }
     if ($request->has('recommendedby')) {
         $model->recommendedby = $input['recommendedby'];
     } else {
         $model->recommendedby = 0;
     }
     $model->recommendedbyname = $input['recommendedbyname'];
     if ($request->has('recommendedbytype')) {
         $model->recommendedbytype = $input['recommendedbytype'];
     }
     if ($request->has('customertype')) {
         $model->customertype = $input['customertype'];
     }
     $model->documentstatus = $input['documentstatus'];
     $model->remark = $input['remark'];
     if ($model->oldcarbrandid == '') {
         $model->oldcarbrandid = null;
     }
     if ($model->oldcarmodelid == '') {
         $model->oldcarmodelid = null;
     }
     if ($model->oldcargear == '') {
         $model->oldcargear = null;
     }
     if ($model->oldcarcolor == '') {
         $model->oldcarcolor = null;
     }
     if ($model->oldcarenginesize == '') {
         $model->oldcarenginesize = null;
     }
     if ($model->oldcarlicenseplate == '') {
         $model->oldcarlicenseplate = null;
     }
     if ($model->oldcaryear == '') {
         $model->oldcaryear = null;
     }
     if ($model->oldcarprice == '') {
         $model->oldcarprice = null;
     }
     if ($model->oldcarbuyername == '') {
         $model->oldcarbuyername = null;
     }
     if ($model->oldcarother == '') {
         $model->oldcarother = null;
     }
     if ($model->cashpledgepaymenttype == 0) {
         $model->cashpledgechargepercent = null;
         $model->cashpledgechargeamount = null;
     }
     if ($model->purchasetype == 0) {
         $model->finacecompanyid = null;
         $model->interestratetypeid = null;
         $model->interest = null;
         $model->down = null;
         $model->installments = null;
         $model->subsidise = null;
         $model->interestratemode = null;
     }
     if ($model->recommendedby == false) {
         $model->recommendedbyname = null;
         $model->recommendedbytype = null;
     }
     if ($input['contractdate'] != null && $input['contractdate'] != '') {
         $model->contractdate = date('Y-m-d', strtotime($input['contractdate']));
     } else {
         $model->contractdate = $input['contractdate'];
     }
     if ($model->save()) {
         $giveawayFreeData = $request->giveawayFreeData;
         $giveawayBuyData = $request->giveawayBuyData;
         $giveawayFreeData = json_decode($giveawayFreeData, true);
         $giveawayBuyData = json_decode($giveawayBuyData, true);
         foreach ($giveawayFreeData as $data) {
             $obj = new CarPreemptionGiveaway();
             $obj->carpreemptionid = $model->id;
             $obj->giveawayid = $data["giveawayid"];
             $obj->free = true;
             $obj->price = $data["price"];
             $obj->save();
         }
         foreach ($giveawayBuyData as $data) {
             $obj = new CarPreemptionGiveaway();
             $obj->carpreemptionid = $model->id;
             $obj->giveawayid = $data["giveawayid"];
             $obj->free = false;
             $obj->save();
         }
         return redirect()->action('CarPreemptionController@edit', ['id' => $model->id]);
     } else {
         //hack returning error
         $this->validate($request, ['bookno' => 'alpha'], ['bookno.alpha' => 'ไม่สามารถทำการบันทึกข้อมูลการจองได้ กรุณาติดต่อผู้ดูแลระบบ!!']);
     }
 }