public function create_history($id)
 {
     $this->autoRender = false;
     // backup old version
     $quote_id = (int) $id;
     App::import('Model', 'QuoteManager.Quote');
     $quote = new Quote();
     $quote_model = new Quote();
     $quote_model->recursive = -1;
     //    cake_debug($quote_id); exit;
     $backup_data = $quote->find('first', array('conditions' => array('Quote.id' => $quote_id)));
     $update_version = $quote->find('first', array('conditions' => array('Quote.id' => $quote_id)));
     $versions = $quote_model->find('all', array('conditions' => array('Quote.vid' => $quote_id)));
     $current_version = count($versions) + 1;
     $quote_number_split = explode('-', $update_version['Quote']['quote_number']);
     $update_version['Quote']['quote_number'] = "{$quote_number_split[0]}-{$current_version}";
     $this->request->data['Quote']['quote_number'] = "{$quote_number_split[0]}-{$current_version}";
     $update_version['Quote']['current_version'] = $current_version;
     $update_version['Quote']['status'] = "Revision";
     //    pr($update_version['Quote']); exit;
     $quote_model->save($update_version['Quote']);
     $current_user = $this->loginUser;
     $backup_data['Quote']['vid'] = $quote_id;
     $backup_data['Quote']['id'] = null;
     $backup_data['Quote']['created'] = date('Y-m-d H:i:s');
     $backup_data['Quote']['created_by'] = isset($current_user['id']) ? $current_user['id'] : '0';
     unset($backup_data['WorkOrder']);
     unset($backup_data['PurchaseOrder']);
     $backup_data_all = $backup_data;
     unset($backup_data['QuoteStatus']);
     unset($backup_data['CabinetOrder']);
     unset($backup_data['QuoteInstallerPaysheet']);
     unset($backup_data['CabinetOrderItem']);
     unset($backup_data['Customer']);
     unset($backup_data['User']);
     unset($backup_data['UserCreated']);
     unset($backup_data['Invoice']);
     unset($backup_data['GraniteOrder']);
     unset($backup_data['GraniteOrderItem']);
     //    pr($backup_data);exit;
     $flag = $quote->save($backup_data['Quote'], false);
     $backup_data['Quote']['vid'] = $quote_id;
     // old quote id
     $quote_id = (int) $quote->id;
     // new quote id
     if (isset($this->request->data['QuoteStatus']) && !empty($this->request->data['QuoteStatus'])) {
         $this->request->data['QuoteStatus']['quote_vid'] = $quote_id;
     }
     $backup_data['Quote']['id'] = $quote_id;
     // Quote Installer Paysheet
     foreach ($backup_data_all['QuoteInstallerPaysheet'] as $index => $value) {
         $backup_data_all['QuoteInstallerPaysheet'][$index]['id'] = null;
         $backup_data_all['QuoteInstallerPaysheet'][$index]['quote_id'] = $quote_id;
     }
     App::import('Model', 'QuoteManager.QuoteInstallerPaysheet');
     $QuoteInstallerPaysheet = new QuoteInstallerPaysheet();
     $QuoteInstallerPaysheet->saveAll($backup_data_all['QuoteInstallerPaysheet']);
     // Quote Status
     foreach ($backup_data_all['QuoteStatus'] as $index => $value) {
         $backup_data_all['QuoteStatus'][$index]['id'] = null;
         $backup_data_all['QuoteStatus'][$index]['quote_id'] = $quote_id;
         $backup_data_all['QuoteStatus'][$index]['quote_vid'] = $backup_data['Quote']['vid'];
     }
     App::import('Model', 'QuoteManager.QuoteStatus');
     $QuoteStatus = new QuoteStatus();
     $QuoteStatus->saveAll($backup_data_all['QuoteStatus']);
     if (!empty($backup_data_all['GraniteOrder'])) {
         // Granite Order
         foreach ($backup_data_all['GraniteOrder'] as $index => $value) {
             $backup_data_all['GraniteOrder'][$index]['id'] = null;
             $backup_data_all['GraniteOrder'][$index]['quote_id'] = $quote_id;
         }
         App::import('Model', 'QuoteManager.GraniteOrder');
         $graniteOrder = new GraniteOrder();
         $graniteOrder->saveAll($backup_data_all['GraniteOrder']);
         // Granite Order Item
         foreach ($backup_data_all['GraniteOrderItem'] as $index => $value) {
             $backup_data_all['GraniteOrderItem'][$index]['id'] = null;
             $backup_data_all['GraniteOrderItem'][$index]['quote_id'] = $quote_id;
             $backup_data_all['GraniteOrderItem'][$index]['granite_order_id'] = $graniteOrder->id;
         }
         App::import('Model', 'QuoteManager.GraniteOrderItem');
         $graniteOrderItem = new GraniteOrderItem();
         $graniteOrderItem->saveAll($backup_data_all['GraniteOrderItem']);
     }
     if (!empty($backup_data_all['CabinetOrder'])) {
         // Cabinet Order
         foreach ($backup_data_all['CabinetOrder'] as $index => $value) {
             $backup_data_all['CabinetOrder'][$index]['id'] = null;
             $backup_data_all['CabinetOrder'][$index]['quote_id'] = $quote_id;
         }
         App::import('Model', 'QuoteManager.CabinetOrder');
         $CabinetOrder = new CabinetOrder();
         $CabinetOrder->saveAll($backup_data_all['CabinetOrder'], false);
     }
     // Cabinet Order Item
     //    foreach ($backup_data_all['CabinetOrderItem'] as $index => $value) {
     //      $backup_data_all['CabinetOrderItem'][$index]['id'] = null;
     //      $backup_data_all['CabinetOrderItem'][$index]['quote_id'] = $quote_id;
     ////      $backup_data_all['CabinetOrderItem'][$index]['cabinet_order_id'] = $CabinetOrder->id;
     //    }
     //    App::import('Model', 'QuoteManager.CabinetOrderItem');
     //    $CabinetOrderItem = new CabinetOrderItem();
     //    $CabinetOrderItem->saveAll($backup_data_all['CabinetOrderItem']);
     //    }
 }
 function GraniteOrderCost($order_id = null, $quote_id = null)
 {
     $order_data = array();
     $total_cost = 0.0;
     $gst_cost = 0.0;
     $item_cost = 0.0;
     App::import("Model", "QuoteManager.GraniteOrder");
     $granite_order = new GraniteOrder();
     if ($order_id) {
         $order_data = $granite_order->find("first", array("conditions" => array("GraniteOrder.id" => $order_id)));
     } elseif ($quote_id) {
         $order_data = $granite_order->find("first", array("conditions" => array("quote_id" => $quote_id)));
     }
     if ($order_data) {
         $total_cost += $order_data['GraniteOrder']['cost'];
         $order_items = $this->GraniteOrderItem($order_data['GraniteOrder']['id']);
         foreach ($order_items as $order_item) {
             $item_info = explode('|', $order_item['GraniteOrderItem']['code']);
             $item_type = $item_info[1];
             switch ($item_type) {
                 case 'item':
                     $item_cost += $order_item['GraniteOrderItem']['quantity'] * $order_item['Item']['price'];
                     break;
                 case 'cabinet':
                     $item_cost += $order_item['GraniteOrderItem']['quantity'] * $order_item['Cabinet']['manual_unit_price'];
                     break;
                 case 'door':
                     $item_cost += $order_item['GraniteOrderItem']['quantity'] * $order_item['Door']['door_price_each'];
                     break;
                 case 'drawer':
                     $item_cost += $order_item['GraniteOrderItem']['quantity'] * $order_item['Door']['drawer_price_each'];
                     break;
                 case 'wall_door':
                     $item_cost += $order_item['GraniteOrderItem']['quantity'] * $order_item['Door']['wall_door_price_each'];
                     break;
             }
         }
         $total_cost += $item_cost;
         $gst_cost = $total_cost * GST / 100;
         $total_cost += $gst_cost;
     }
     return array('total_cost' => $total_cost, 'gst_cost' => $gst_cost, 'item_cost' => $item_cost);
     //    debug($order_data);
 }