public function confirm(Request $request)
 {
     $postData = $request->all();
     $id = $postData['nominationId'];
     $pdCargo = PdCargo::getTableName();
     $pdCargoNomination = PdCargoNomination::getTableName();
     $nomi_row = PdCargoNomination::find($id);
     if (!$nomi_row) {
         throw new DataInputException("cargo nomination id {$id} not existed");
     }
     $result = \DB::transaction(function () use($nomi_row, $id) {
         $code = "BEGIN";
         $message = "begin confirming";
         $checkDate = \Helper::isNullOrEmpty($nomi_row->NOMINATION_DATE);
         $checkQty = \Helper::isNullOrEmpty($nomi_row->NOMINATION_QTY);
         $warning_msg = $checkDate || $checkQty ? "Request data is being copied to Nomination data" : "";
         $nomi_row->NOMINATION_DATE = $checkDate ? $nomi_row->REQUEST_DATE : $nomi_row->NOMINATION_DATE;
         $nomi_row->NOMINATION_QTY = $checkQty ? $nomi_row->REQUEST_QTY : $nomi_row->NOMINATION_QTY;
         $nomi_row->NOMINATION_UOM = $checkQty ? $nomi_row->REQUEST_QTY_UOM : $nomi_row->NOMINATION_UOM;
         $nomi_row->save();
         //--------- generate CARGO_SCHEDULE ---------------
         $attributes = ['NOMINATION_ID' => $id];
         $values = ['CARGO_ID' => $nomi_row->CARGO_ID, 'SCHEDULE_DATE' => $nomi_row->NOMINATION_DATE, 'SCHEDULE_QTY' => $nomi_row->NOMINATION_QTY, 'SCHEDULE_UOM' => $nomi_row->NOMINATION_UOM, 'PD_TRANSIT_CARRIER_ID' => $nomi_row->PD_TRANSIT_CARRIER_ID, 'CARGO_STATUS' => 3];
         $pdCargoSchedule = PdCargoSchedule::updateOrCreate($attributes, $values);
         if ($pdCargoSchedule->wasRecentlyCreated) {
             $pdCargoSchedule->fill(['TRANSIT_TYPE' => $nomi_row->TRANSIT_TYPE])->save();
         }
         $code = "GENERATING";
         $message = "generate CARGO_SCHEDULE done";
         //--------- generate VOYAGE --------------
         $voyage = PdVoyage::firstOrNew(["NOMINATION_ID" => $id]);
         if (!$voyage->exists) {
             $carrier_row = PdTransitCarrier::find($nomi_row->PD_TRANSIT_CARRIER_ID);
             if (!$carrier_row) {
                 throw new DataInputException("please check carrier of cargo nomination id {$id}");
             }
             $cargo = PdCargo::find($nomi_row->CARGO_ID);
             $voyage_code = $carrier_row->CODE . "_#{$id}";
             $voyage_name = $carrier_row->NAME . "_#{$id}";
             $voyage->CODE = $voyage_code;
             $voyage->NAME = $voyage_name;
             $voyage->CARRIER_ID = $nomi_row->PD_TRANSIT_CARRIER_ID;
             $voyage->CARGO_ID = $nomi_row->CARGO_ID;
             $voyage->LIFTING_ACCOUNT = $cargo->LIFTING_ACCT;
             $voyage->STORAGE_ID = $cargo->STORAGE_ID;
             $voyage->VOYAGE_NO = $voyage_code;
             $voyage->INCOTERM = $nomi_row->INCOTERM;
             $voyage->SCHEDULE_DATE = $nomi_row->NOMINATION_DATE;
             $voyage->ADJUSTABLE_TIME = $nomi_row->NOMINATION_ADJ_TIME;
             $voyage->SCHEDULE_QTY = $nomi_row->NOMINATION_QTY;
             $voyage->QUANTITY_TYPE = $cargo->QUANTITY_TYPE;
             $voyage->SCHEDULE_UOM = $nomi_row->NOMINATION_UOM;
             $voyage->BERTH_ID = null;
             $voyage->save();
             $message = "generate PD_VOYAGE done";
         }
         $gen_cargo_load = false;
         $gen_cargo_unload = false;
         if ($nomi_row->IS_IMPORT == 1) {
             $gen_cargo_unload = true;
         } else {
             $gen_cargo_load = true;
             if ($nomi_row->INCOTERM == 5) {
                 $gen_cargo_unload = true;
                 //INCOTERM CODE 5 = DES
             }
         }
         if ($gen_cargo_load) {
             $cargoLoad = PdCargoLoad::firstOrNew(["NOMINATION_ID" => $id]);
             if (!$cargoLoad->exists) {
                 $cargoLoad->CARGO_ID = $nomi_row->CARGO_ID;
                 $cargoLoad->DATE_LOAD = $nomi_row->NOMINATION_DATE;
                 $cargoLoad->LOAD_QTY = $nomi_row->NOMINATION_QTY;
                 $cargoLoad->LOAD_UOM = $nomi_row->NOMINATION_UOM;
                 $cargoLoad->TRANSIT_TYPE = $nomi_row->TRANSIT_TYPE;
                 $cargoLoad->PD_TRANSIT_CARRIER_ID = $nomi_row->PD_TRANSIT_CARRIER_ID;
                 $cargoLoad->BERTH_ID = null;
                 $cargoLoad->CARGO_STATUS = $nomi_row->CARGO_STATUS;
                 $cargoLoad->save();
                 $message = "generate PD_CARGO_LOAD done";
             }
         }
         if ($gen_cargo_unload) {
             $cargoUnload = PdCargoUnload::firstOrNew(["NOMINATION_ID" => $id]);
             if (!$cargoUnload->exists) {
                 $cargoUnload->CARGO_ID = $nomi_row->CARGO_ID;
                 $cargoUnload->DATE_UNLOAD = $nomi_row->NOMINATION_DATE;
                 $cargoUnload->LOAD_QTY = $nomi_row->NOMINATION_QTY;
                 $cargoUnload->LOAD_UOM = $nomi_row->NOMINATION_UOM;
                 $cargoUnload->TRANSIT_TYPE = $nomi_row->TRANSIT_TYPE;
                 $cargoUnload->PD_TRANSIT_CARRIER_ID = $nomi_row->PD_TRANSIT_CARRIER_ID;
                 $cargoUnload->BERTH_ID = null;
                 $cargoUnload->CARGO_STATUS = $nomi_row->CARGO_STATUS;
                 $cargoUnload->save();
                 $message = "generate PD_CARGO_UNLOAD done";
             }
         }
         $nomi_row->CARGO_STATUS = 3;
         $nomi_row->save();
         $message = "ok: {$warning_msg}";
         $result = ['code' => $code, 'message' => $message];
         return $result;
     });
     return response()->json($result);
 }