From f7407e0e3e59095788a06ae2679141c56bc70d85 Mon Sep 17 00:00:00 2001 From: Karl Cordes Date: Sun, 31 Jan 2010 00:57:51 -0700 Subject: [PATCH] Completed most of the change to line_items. Javascript buildup in-progress --- controllers/costings_controller.php | 10 +- controllers/line_items_controller.php | 134 +++++++++++++++++++++++++ controllers/quote_pages_controller.php | 68 ++++++------- controllers/quotes_controller.php | 8 +- models/costing.php | 9 +- models/line_item.php | 48 +++++++++ models/quote.php | 2 +- views/costings/add.ctp | 48 ++------- views/costings/edit.ctp | 8 +- views/costings/index.ctp | 16 +-- views/costings/view.ctp | 18 +--- views/layouts/default.ctp | 6 +- views/quotes/view.ctp | 22 ++-- 13 files changed, 260 insertions(+), 137 deletions(-) create mode 100644 controllers/line_items_controller.php create mode 100644 models/line_item.php diff --git a/controllers/costings_controller.php b/controllers/costings_controller.php index 35a73843..af3d18a1 100755 --- a/controllers/costings_controller.php +++ b/controllers/costings_controller.php @@ -2,7 +2,7 @@ class CostingsController extends AppController { var $name = 'Costings'; - var $helpers = array('Html', 'Form'); + var $helpers = array('Html', 'Form', 'Javascript'); function index() { $this->Costing->recursive = 0; @@ -28,10 +28,10 @@ class CostingsController extends AppController { } } $products = $this->Costing->Product->find('list'); - $quoteProducts = $this->Costing->QuoteProduct->find('list'); + $lineItems = $this->Costing->LineItem->find('list'); $purchaseCurrencies = $this->Costing->PurchaseCurrency->find('list'); $saleCurrencies = $this->Costing->SaleCurrency->find('list'); - $this->set(compact('products', 'quoteProducts', 'purchaseCurrencies', 'saleCurrencies')); + $this->set(compact('products', 'lineItems', 'purchaseCurrencies', 'saleCurrencies')); } function edit($id = null) { @@ -51,10 +51,10 @@ class CostingsController extends AppController { $this->data = $this->Costing->read(null, $id); } $products = $this->Costing->Product->find('list'); - $quoteProducts = $this->Costing->QuoteProduct->find('list'); + $lineItems = $this->Costing->LineItem->find('list'); $purchaseCurrencies = $this->Costing->PurchaseCurrency->find('list'); $saleCurrencies = $this->Costing->SaleCurrency->find('list'); - $this->set(compact('products','quoteProducts','purchaseCurrencies','saleCurrencies')); + $this->set(compact('products','lineItems','purchaseCurrencies','saleCurrencies')); } function delete($id = null) { diff --git a/controllers/line_items_controller.php b/controllers/line_items_controller.php new file mode 100644 index 00000000..ffeba97d --- /dev/null +++ b/controllers/line_items_controller.php @@ -0,0 +1,134 @@ +LineItem->recursive = 0; + $this->set('quoteProducts', $this->paginate()); + } + + function view($id = null) { + if (!$id) { + $this->Session->setFlash(__('Invalid LineItem.', true)); + $this->redirect(array('action'=>'index')); + } + $this->set('quoteProduct', $this->LineItem->read(null, $id)); + } + + function add($quoteid = null) { + + if (!$quoteid && empty($this->data)) { + $this->Session->setFlash(__('Invalid Quote ID', true)); + $this->redirect(array('action'=>'index')); + } + + if (!empty($this->data)) { + $this->LineItem->create(); + + $product = $this->LineItem->Product->findById($this->data['LineItem']['product_id']); + + /* Copy all the data from the Product to the new LineItem */ + + $this->data['LineItem']['description'] = $product['Product']['description']; + $this->data['LineItem']['title'] = $product['Product']['title']; + + + $numberOfItems = $this->LineItem->find('count', + array('conditions' => array('LineItem.quote_id' => $this->data['LineItem']['quote_id']))); + + $numberOfItems++; + + $this->data['LineItem']['item_number'] = $numberOfItems; + + + + if ($this->LineItem->save($this->data)) { + $quoteid = $this->data['LineItem']['quote_id']; + + $this->Session->setFlash(__('Product Added to Quote Successfully', true)); + $this->redirect(array('controller'=>'quotes', 'action'=>'view', $quoteid)); + } else { + $this->Session->setFlash(__('The LineItem could not be saved. Please, try again.', true)); + } + } + + + $principles = $this->LineItem->Product->Principle->find('list'); + + $quote = $this->LineItem->Quote->read(null, $quoteid); + $this->set(compact('principles','quote', 'products')); + + } + + + /* Display a list of Products for a given principle. Used for the add() method */ + function principle_products() { + if (empty($this->data['LineItem']['principle_id'])) { + } + else { + $this->set('products', $this->LineItem->Product->find('list', array('conditions'=>array('Product.principle_id'=>$this->data['LineItem']['principle_id'])))); + } + } + + + /* Display a list of Options (if any) for a given Product. Used for the add() method */ + function product_options() { + + /*$this->set('categories', $this->LineItem->Product->ProductOptionsCategory->find('list'), + array('conditions' => array('ProductOptionsCategory.product_id'=>$this->data['LineItem']['product_id']), + 'order'=>'ProductOptionsCategory.location ASC') );*/ + + $this->set('options', $this->LineItem->Product->ProductOptionsCategory->find('all', + array('conditions' => array('ProductOptionsCategory.product_id'=>$this->data['LineItem']['product_id']), + 'order'=>'ProductOptionsCategory.location ASC'))); + + + } + + + + function edit($id = null) { + + + if (!$id && empty($this->data)) { + $this->Session->setFlash(__('Invalid LineItem', true)); + $this->redirect(array('action'=>'index')); + } + + + if (!empty($this->data)) { + if ($this->LineItem->save($this->data)) { + $this->Session->setFlash(__('The LineItem has been saved', true)); + $this->redirect(array('action'=>'index')); + } else { + $this->Session->setFlash(__('The LineItem could not be saved. Please, try again.', true)); + } + } + if (empty($this->data)) { + $this->data = $this->LineItem->read(null, $id); + } + + $quotes = $this->LineItem->Quote->find('list'); + $products = $this->LineItem->Product->find('list'); + $this->set(compact('quotes','products')); + } + + function delete($id = null) { + + $thisQP = $this->LineItem->read(null, $id); + + if (!$id) { + $this->Session->setFlash(__('Invalid id for LineItem', true)); + $this->redirect(array('action'=>'index')); + } + if ($this->LineItem->del($id)) { + $this->Session->setFlash(__('LineItem deleted', true)); + $this->redirect(array('controller'=>'quotes', 'action'=>'view/'.$thisQP['Quote']['id'])); + } + } + + +} +?> diff --git a/controllers/quote_pages_controller.php b/controllers/quote_pages_controller.php index 198a0416..aced3045 100755 --- a/controllers/quote_pages_controller.php +++ b/controllers/quote_pages_controller.php @@ -106,51 +106,51 @@ class QuotePagesController extends AppController { } else { $quotePage = $this->QuotePage->read(null, $id); - + //$enquiry = $this->QuotePage->Quote->Enquiry->find('all', array('conditions' => array('Enquiry.id' => $quotePage['Quote']['enquiry_id']))); $enquiry = $this->QuotePage->Quote->Enquiry->read(null, $quotePage['Quote']['enquiry_id']); - // $quote = $this->QuotePage->Quote->find('all', array('conditions' => array('Quote.id' => $quotePage['Quote']['id']))); + // $quote = $this->QuotePage->Quote->find('all', array('conditions' => array('Quote.id' => $quotePage['Quote']['id']))); -$quoteProducts = $this->QuotePage->Quote->QuoteProduct->find('all', array('recursive' => 0, 'conditions' => - array('QuoteProduct.quote_id' => $quotePage['Quote']['id']), - 'order' => array('QuoteProduct.item_number ASC')) - ); + $quoteProducts = $this->QuotePage->Quote->LineItem->find('all', array('recursive' => 0, 'conditions' => + array('LineItem.quote_id' => $quotePage['Quote']['id']), + 'order' => array('LineItem.item_number ASC')) + ); -$contactFirstName = $enquiry['Contact']['first_name']; + $contactFirstName = $enquiry['Contact']['first_name']; -$salesEngineerName = $enquiry['User']['first_name'].' '.$enquiry['User']['last_name']; + $salesEngineerName = $enquiry['User']['first_name'].' '.$enquiry['User']['last_name']; -$productRows = ""; + $productRows = ""; -foreach($quoteProducts as $quoteproduct) { + foreach($quoteProducts as $quoteproduct) { - $itemNumber = $quoteproduct['QuoteProduct']['item_number']; - $title = $quoteproduct['QuoteProduct']['title']; - - if($quoteproduct['QuoteProduct']['option'] == 1) { - $optionText = "Option "; - } - else { - $optionText = ""; - } + $itemNumber = $quoteproduct['LineItem']['item_number']; + $title = $quoteproduct['LineItem']['title']; - $productRows .= << -$optionText -$itemNumber + $optionText + $itemNumber -$title + $title ENDROW; -} + } $this->data['QuotePage']['content'] = << -$productRows + $productRows $salesEngineerName

ENDCONTENT; - -if (!empty($this->data)) { - if ($this->QuotePage->save($this->data)) { - $this->Session->setFlash(__('The QuotePage has been saved', true)); - $id = $quotePage['Quote']['id']; - $this->redirect(array('controller' => 'quotes', 'action'=>'view/'.$id)); - } else { - $this->Session->setFlash(__('The QuotePage could not be saved. Please, try again.', true)); + + if (!empty($this->data)) { + if ($this->QuotePage->save($this->data)) { + $this->Session->setFlash(__('The QuotePage has been saved', true)); + $id = $quotePage['Quote']['id']; + $this->redirect(array('controller' => 'quotes', 'action'=>'view/'.$id)); + } else { + $this->Session->setFlash(__('The QuotePage could not be saved. Please, try again.', true)); + } } - } diff --git a/controllers/quotes_controller.php b/controllers/quotes_controller.php index a6bf10e9..973e610e 100755 --- a/controllers/quotes_controller.php +++ b/controllers/quotes_controller.php @@ -25,8 +25,8 @@ class QuotesController extends AppController { } - $quoteProducts = $this->Quote->QuoteProduct->find('all', array('recursive' => 0, 'conditions' => array('QuoteProduct.quote_id' => $id), - 'order' => array('QuoteProduct.item_number ASC')) + $quoteProducts = $this->Quote->LineItem->find('all', array('recursive' => 0, 'conditions' => array('LineItem.quote_id' => $id), + 'order' => array('LineItem.item_number ASC')) ); $this->set('customer', $this->Quote->Enquiry->Customer->read(null, $quote['Enquiry']['customer_id'])); @@ -125,8 +125,8 @@ class QuotesController extends AppController { $enquiry = $this->Quote->Enquiry->find('first', array('conditions' => array('Enquiry.id' => $quote['Quote']['enquiry_id']))); - $quoteProducts = $this->Quote->QuoteProduct->find('all', array('recursive' => 0, 'conditions' => array('QuoteProduct.quote_id' => $id), - 'order' => array('QuoteProduct.item_number ASC')) + $quoteProducts = $this->Quote->LineItem->find('all', array('recursive' => 0, 'conditions' => array('LineItem.quote_id' => $id), + 'order' => array('LineItem.item_number ASC')) ); $user = $this->Quote->Enquiry->User->find('first', array('conditions' => array('User.id' => $enquiry['Enquiry']['user_id']))); diff --git a/models/costing.php b/models/costing.php index 84d03345..e3c213d7 100755 --- a/models/costing.php +++ b/models/costing.php @@ -14,16 +14,11 @@ class Costing extends AppModel { 'order' => '' ), - 'QuoteProduct' => array('className'=>'QuoteProduct','foreignKey' => 'quote_product_id' + 'LineItem' => array('className'=>'LineItem','foreignKey' => 'line_item_id' ), 'PurchaseCurrency' => array('className' => 'Currency', 'foreignKey' => 'purchase_currency_id'), 'SaleCurrency' => array('className' => 'Currency', 'foreignKey' => 'sale_currency_id') - - //'ProductOption' => array('className' => 'ProductOption', 'foreignKey' => 'product_option_id'), - //'QuoteProductOption' - - - + ); diff --git a/models/line_item.php b/models/line_item.php new file mode 100644 index 00000000..2d8e7255 --- /dev/null +++ b/models/line_item.php @@ -0,0 +1,48 @@ + array('className' => 'Quote', + 'foreignKey' => 'quote_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ), + 'Product' => array('className' => 'Product', + 'foreignKey' => 'product_id', + 'conditions' => '', + 'fields' => '', + 'order' => '' + ), + + ); + + + var $hasOne = array( + 'Costing' => array('className' => 'Costing', + 'foreignKey' => 'line_item_id') + ); + + + + + var $order = "item_number ASC"; + +} +?> \ No newline at end of file diff --git a/models/quote.php b/models/quote.php index fb7bc848..ea015517 100755 --- a/models/quote.php +++ b/models/quote.php @@ -24,7 +24,7 @@ class Quote extends AppModel { ); var $hasMany = array( - 'QuoteProduct' => array('className' => 'QuoteProduct', + 'LineItem' => array('className' => 'LineItem', 'foreignKey' => 'quote_id', 'dependent' => false, 'conditions' => '', diff --git a/views/costings/add.ctp b/views/costings/add.ctp index 391f1805..a8b6eeea 100755 --- a/views/costings/add.ctp +++ b/views/costings/add.ctp @@ -1,15 +1,12 @@ +link('add_costing'); ?> +
- - - create('Costing');?>
input('product_id'); - echo $form->input('quote_product_id'); - echo $form->input('order_product_id'); - echo $form->input('invoice_product_id'); + echo $form->input('line_item_id'); echo $form->input('purchase_currency_id'); echo $form->input('sale_currency_id'); echo $form->input('quantity'); @@ -18,59 +15,28 @@ echo $form->input('our_discount_percent'); echo $form->input('packing'); - echo '
'; - echo $form->label('fob_country_of_export', 'F.O.B Country of Export'); - echo $form->text('fob_country_of_export', array('readonly'=>'readonly', 'id'=>'fob_country_of_export')); - echo '
'; - - echo '
'; - echo $form->label('convert_to_aud', 'Convert to A$'); - echo $form->text('convert_to_aud', array('readonly'=>'readonly', 'id'=>'convert_to_aud')); - echo '
'; - + echo $form->input('FobCountryOfExport'); echo $form->input('shipping_weight'); echo $form->input('shipping_cost'); echo $form->input('duty_percent'); echo $form->input('customs'); - echo $form->input('finance_percent', array('after'=>'

')); + echo $form->input('finance_percent'); echo $form->input('misc_costs'); echo $form->input('gross_sell_price'); echo $form->input('sale_discount_percent'); echo $form->input('net_sell_price'); - - echo '
'; - echo $form->label('total_landed_cost', 'Total Landed Cost'); - echo $form->text('total_landed_cost', array('readonly'=>'readonly', 'id'=>'total_landed_cost')); - echo '
'; - echo $form->input('sellprice_each', array('label' => 'Sell Price Each', 'id'=>'sellprice_each')); - echo '
'; - echo $form->label('gross_profit_dollars', 'Gross Profit $'); - echo $form->text('gross_profit_dollars', array('readonly'=>'readonly', 'id'=>'gross_profit_dollars')); - echo '
'; - echo '
'; - echo $form->label('gross_profit_percent', 'Gross Profit %'); - echo $form->text('gross_profit_prercent', array('readonly'=>'readonly', 'id'=>'gross_profit_percent')); - echo '
'; - - - //echo $ajax->observeForm('CostingAddForm', array('frequency' => 0.5, 'complete'=>'buildup()')); - - ?>
end('Submit');?> - - link('quotenik/add_costing', true); ?> -
  • link(__('List Costings', true), array('action' => 'index'));?>
  • link(__('List Products', true), array('controller' => 'products', 'action' => 'index')); ?>
  • link(__('New Product', true), array('controller' => 'products', 'action' => 'add')); ?>
  • -
  • link(__('List Quote Products', true), array('controller' => 'quote_products', 'action' => 'index')); ?>
  • -
  • link(__('New Quote Product', true), array('controller' => 'quote_products', 'action' => 'add')); ?>
  • +
  • link(__('List Line Items', true), array('controller' => 'line_items', 'action' => 'index')); ?>
  • +
  • link(__('New Line Item', true), array('controller' => 'line_items', 'action' => 'add')); ?>
  • link(__('List Currencies', true), array('controller' => 'currencies', 'action' => 'index')); ?>
  • link(__('New Purchase Currency', true), array('controller' => 'currencies', 'action' => 'add')); ?>
diff --git a/views/costings/edit.ctp b/views/costings/edit.ctp index bf207890..aa4f2821 100755 --- a/views/costings/edit.ctp +++ b/views/costings/edit.ctp @@ -5,9 +5,7 @@ input('id'); echo $form->input('product_id'); - echo $form->input('quote_product_id'); - echo $form->input('order_product_id'); - echo $form->input('invoice_product_id'); + echo $form->input('line_item_id'); echo $form->input('purchase_currency_id'); echo $form->input('sale_currency_id'); echo $form->input('quantity'); @@ -34,8 +32,8 @@
  • link(__('List Costings', true), array('action' => 'index'));?>
  • link(__('List Products', true), array('controller' => 'products', 'action' => 'index')); ?>
  • link(__('New Product', true), array('controller' => 'products', 'action' => 'add')); ?>
  • -
  • link(__('List Quote Products', true), array('controller' => 'quote_products', 'action' => 'index')); ?>
  • -
  • link(__('New Quote Product', true), array('controller' => 'quote_products', 'action' => 'add')); ?>
  • +
  • link(__('List Line Items', true), array('controller' => 'line_items', 'action' => 'index')); ?>
  • +
  • link(__('New Line Item', true), array('controller' => 'line_items', 'action' => 'add')); ?>
  • link(__('List Currencies', true), array('controller' => 'currencies', 'action' => 'index')); ?>
  • link(__('New Purchase Currency', true), array('controller' => 'currencies', 'action' => 'add')); ?>
  • diff --git a/views/costings/index.ctp b/views/costings/index.ctp index d7c67ab3..192d702f 100755 --- a/views/costings/index.ctp +++ b/views/costings/index.ctp @@ -11,9 +11,7 @@ echo $paginator->counter(array( sort('id');?> sort('created');?> sort('product_id');?> - sort('quote_product_id');?> - sort('order_product_id');?> - sort('invoice_product_id');?> + sort('line_item_id');?> sort('purchase_currency_id');?> sort('sale_currency_id');?> sort('quantity');?> @@ -51,13 +49,7 @@ foreach ($costings as $costing): link($costing['Product']['title'], array('controller' => 'products', 'action' => 'view', $costing['Product']['id'])); ?> - link($costing['QuoteProduct']['title'], array('controller' => 'quote_products', 'action' => 'view', $costing['QuoteProduct']['id'])); ?> - - - - - - + link($costing['LineItem']['title'], array('controller' => 'line_items', 'action' => 'view', $costing['LineItem']['id'])); ?> link($costing['PurchaseCurrency']['name'], array('controller' => 'currencies', 'action' => 'view', $costing['PurchaseCurrency']['id'])); ?> @@ -126,8 +118,8 @@ foreach ($costings as $costing):
  • link(__('New Costing', true), array('action' => 'add')); ?>
  • link(__('List Products', true), array('controller' => 'products', 'action' => 'index')); ?>
  • link(__('New Product', true), array('controller' => 'products', 'action' => 'add')); ?>
  • -
  • link(__('List Quote Products', true), array('controller' => 'quote_products', 'action' => 'index')); ?>
  • -
  • link(__('New Quote Product', true), array('controller' => 'quote_products', 'action' => 'add')); ?>
  • +
  • link(__('List Line Items', true), array('controller' => 'line_items', 'action' => 'index')); ?>
  • +
  • link(__('New Line Item', true), array('controller' => 'line_items', 'action' => 'add')); ?>
  • link(__('List Currencies', true), array('controller' => 'currencies', 'action' => 'index')); ?>
  • link(__('New Purchase Currency', true), array('controller' => 'currencies', 'action' => 'add')); ?>
  • diff --git a/views/costings/view.ctp b/views/costings/view.ctp index 70b8219d..a7046d98 100755 --- a/views/costings/view.ctp +++ b/views/costings/view.ctp @@ -16,19 +16,9 @@ link($costing['Product']['title'], array('controller' => 'products', 'action' => 'view', $costing['Product']['id'])); ?>   - > + > > - link($costing['QuoteProduct']['title'], array('controller' => 'quote_products', 'action' => 'view', $costing['QuoteProduct']['id'])); ?> -   - - > - > - -   - - > - > - + link($costing['LineItem']['title'], array('controller' => 'line_items', 'action' => 'view', $costing['LineItem']['id'])); ?>   > @@ -121,8 +111,8 @@
  • link(__('New Costing', true), array('action' => 'add')); ?>
  • link(__('List Products', true), array('controller' => 'products', 'action' => 'index')); ?>
  • link(__('New Product', true), array('controller' => 'products', 'action' => 'add')); ?>
  • -
  • link(__('List Quote Products', true), array('controller' => 'quote_products', 'action' => 'index')); ?>
  • -
  • link(__('New Quote Product', true), array('controller' => 'quote_products', 'action' => 'add')); ?>
  • +
  • link(__('List Line Items', true), array('controller' => 'line_items', 'action' => 'index')); ?>
  • +
  • link(__('New Line Item', true), array('controller' => 'line_items', 'action' => 'add')); ?>
  • link(__('List Currencies', true), array('controller' => 'currencies', 'action' => 'index')); ?>
  • link(__('New Purchase Currency', true), array('controller' => 'currencies', 'action' => 'add')); ?>
  • diff --git a/views/layouts/default.ctp b/views/layouts/default.ctp index c971d528..43ed7b5f 100755 --- a/views/layouts/default.ctp +++ b/views/layouts/default.ctp @@ -13,14 +13,14 @@ css('quotenik'); - echo $scripts_for_layout; - //echo $javascript->link('jquery'); - //echo $javascript->link('jquery-ui'); echo $javascript->link('prototype'); echo $javascript->link('scriptaculous'); echo $javascript->link('ckeditor/ckeditor'); echo $javascript->link('validation'); + echo $scripts_for_layout; + + ?> diff --git a/views/quotes/view.ctp b/views/quotes/view.ctp index 877437b6..b7ce2c8a 100755 --- a/views/quotes/view.ctp +++ b/views/quotes/view.ctp @@ -87,28 +87,28 @@ foreach ($quote['QuotePage'] as $quotePage): > '; } - echo number_format($quoteProduct['QuoteProduct']['item_number'], 1, '.', '');?> + echo number_format($quoteProduct['LineItem']['item_number'], 1, '.', '');?> - - - - + + + - link(__('View', true), array('controller'=> 'quote_products', 'action'=>'view', $quoteProduct['QuoteProduct']['id'])); ?> - link(__('Edit', true), array('controller'=> 'quote_products', 'action'=>'edit', $quoteProduct['QuoteProduct']['id'])); ?> - link(__('Delete', true), array('controller'=> 'quote_products', 'action'=>'delete', $quoteProduct['QuoteProduct']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $quoteProduct['QuoteProduct']['id'])); ?> + link(__('View', true), array('controller'=> 'quote_products', 'action'=>'view', $quoteProduct['LineItem']['id'])); ?> + link(__('Edit', true), array('controller'=> 'quote_products', 'action'=>'edit', $quoteProduct['LineItem']['id'])); ?> + link(__('Delete', true), array('controller'=> 'quote_products', 'action'=>'delete', $quoteProduct['LineItem']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $quoteProduct['LineItem']['id'])); ?> @@ -172,7 +172,7 @@ foreach ($quote['QuotePage'] as $quotePage):
      -
    • link(__('Add Product to this Quote', true), array('controller'=> 'quote_products', 'action'=>'add', $quote['Quote']['id']));?>
    • +
    • link(__('Add Product to this Quote', true), array('controller'=> 'line_items', 'action'=>'add', $quote['Quote']['id']));?>
    • link(__('Generate PDF from this Quote', true), array('controller'=>'quotes', 'action'=>'pdf', $quote['Quote']['id'])); ?>