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'); ?>
+
- 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'])); ?>