public function actionCreate($service_type = '')
 {
     $items = array();
     $costs = array();
     $model = new Shipment();
     if ($service_type == '') {
         $this->beforeCreate($model);
     } else {
         if (!array_key_exists($service_type, $model->Service_type)) {
             throw new CHttpException(404, 'Halaman tidak ditemukan');
         }
         $model->service_type = $service_type;
         $this->performAjaxValidation($model);
         $good_types = GoodType::model()->findAll();
         $weight_to_count = array();
         $arr_cost = array();
         $total_cost = 0;
         $total_weight = 0;
         $ratePrice = 0;
         /**
          * model untuk data tambahan  
          */
         if ($model->service_type == 'domestic') {
             $model_domestic = new ShipmentDomestic();
         } elseif ($model->service_type == 'city') {
             $model_city = new ShipmentIntracity();
         } elseif ($model->service_type == 'international') {
             $model_international = new ShipmentInternational();
         }
         if (isset($_POST['Shipment'])) {
             $model->setAttributes($_POST['Shipment']);
             /**
              * set the attributs to each service type 
              */
             if ($model->service_type == 'domestic' && isset($_POST['ShipmentDomestic'])) {
                 $model_domestic->setAttributes($_POST['ShipmentDomestic']);
             } elseif ($model->service_type == 'city' && isset($_POST['ShipmentIntracity'])) {
                 $model_city->setAttributes($_POST['ShipmentIntracity']);
             } elseif ($model->service_type == 'international' && isset($_POST['ShipmentInternational'])) {
                 $model_international->setAttributes($_POST['ShipmentInternational']);
             }
             $trans = Yii::app()->db->beginTransaction();
             try {
                 if ($model->save()) {
                     /**
                      * this is for adding shipment events
                      */
                     $shipment_event = new ShipmentEvent();
                     $shipment_event->shipment_id = $model->id;
                     $shipment_event->status = $model->shipping_status;
                     $shipment_event->user_id = Yii::app()->user->id;
                     $shipment_event->save();
                     /**
                      * this is for shipment items 
                      */
                     $shipment_items = $_POST['ShipmentItem'];
                     foreach ($shipment_items as $item) {
                         $shipment_item = new ShipmentItem();
                         $shipment_item->attributes = $item;
                         $shipment_item->shipment_id = $model->id;
                         $shipment_item->save();
                         array_push($weight_to_count, $shipment_item->getWeightToCount());
                     }
                     $total_weight = array_sum($weight_to_count);
                     /**
                      * this is for shipment additional cost 
                      */
                     $shipment_costs = $_POST['ShipmentAdditionalCharge'];
                     foreach ($shipment_costs as $cost) {
                         $shipment_cost = new ShipmentAdditionalCharge();
                         $shipment_cost->attributes = $cost;
                         $shipment_cost->shipment_id = $model->id;
                         $shipment_cost->save();
                         array_push($arr_cost, $shipment_cost->cost);
                     }
                     $total_cost = array_sum($arr_cost);
                     /**
                      * Get the rate price base on service_type 
                      */
                     if ($model->service_type == 'domestic') {
                         $ratePrice = RateDomestic::getRatePrice($model->service_id, 1, $model_domestic->district_id, $model_domestic->zone_id, $total_weight);
                         $model_domestic->shipment_id = $model->id;
                         $model_domestic->save();
                     } elseif ($model->service_type == 'city') {
                         $ratePrice = IntraCityServices::getRates($model->service_id, $area_id = $model_city->area_id, $total_weight);
                         $model_city->shipment_id = $model->id;
                         $model_city->save();
                     } elseif ($model->service_type == 'international' && isset($_POST['ShipmentInternational'])) {
                         $ratePrice = RateInternational::getRatePrice($model->service_id, $total_weight, $model->type, $model_international->zone);
                         $model_international->shipment_id = $model->id;
                         $model_international->save();
                     }
                     $total_cost = $total_cost + $ratePrice;
                     $model->package_weight = $total_weight;
                     $model->charges = $total_cost;
                     $model->save();
                     $trans->commit();
                     $this->redirect(array('admin'));
                 }
             } catch (CDbException $e) {
                 $trans->rollback();
                 throw $e;
             }
         }
         $items[] = new ShipmentItem();
         $costs[] = new ShipmentAdditionalCharge();
         $data_render = array('model' => $model, 'service_type' => $service_type, 'items' => $items, 'costs' => $costs, 'good_types' => $good_types);
         if ($model->service_type == 'domestic') {
             $data_render['model_domestic'] = $model_domestic;
         } else {
             if ($model->service_type == 'city') {
                 $data_render['model_city'] = $model_city;
             } else {
                 if ($model->service_type == 'international') {
                     $data_render['model_international'] = $model_international;
                 }
             }
         }
         $this->render('create', $data_render);
     }
 }