PageRenderTime 32ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/bamboo_system_files/application/models/expenses_model.php

https://github.com/KdeL/BambooInvoice
PHP | 249 lines | 181 code | 54 blank | 14 comment | 16 complexity | cfcef333766b5bef326d12181150007f MD5 | raw file
  1. <?php
  2. class expenses_model extends Model {
  3. function expenses_model()
  4. {
  5. parent::Model();
  6. $this->obj =& get_instance();
  7. }
  8. // --------------------------------------------------------------------
  9. function addExpense($expense_data)
  10. {
  11. if ($this->db->insert('expenses', $expense_data))
  12. {
  13. return $this->db->insert_id();
  14. }
  15. else
  16. {
  17. return FALSE;
  18. }
  19. }
  20. function addExpenseItem($expense_items)
  21. {
  22. if ($this->db->insert('expense_items', $expense_items))
  23. {
  24. return TRUE;
  25. }
  26. else
  27. {
  28. return FALSE;
  29. }
  30. }
  31. // --------------------------------------------------------------------
  32. function updateExpense($expense_id, $expense_data)
  33. {
  34. $this->db->where('id', $expense_id);
  35. if ($this->db->update('expenses', $expense_data))
  36. {
  37. return $expense_id;
  38. }
  39. else
  40. {
  41. return FALSE;
  42. }
  43. }
  44. // --------------------------------------------------------------------
  45. function delete_expense($expense_id)
  46. {
  47. $this->db->where('id', $expense_id);
  48. $this->db->delete('expenses'); // remove expense info
  49. $this->delete_expense_items($expense_id); // remove expense items
  50. }
  51. // --------------------------------------------------------------------
  52. function delete_expense_items($expense_id)
  53. {
  54. $this->db->where('expense_id', $expense_id);
  55. $this->db->delete('expense_items');
  56. }
  57. // --------------------------------------------------------------------
  58. function getSingleExpense($expense_id)
  59. {
  60. $this->db->select('expenses.*, vendors.name, vendors.address1, vendors.address2, vendors.city, vendors.country, vendors.province, vendors.website, vendors.postal_code, vendors.tax_code');
  61. $this->db->select('(SELECT SUM('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity) FROM '.$this->db->dbprefix('expense_items').' WHERE '.$this->db->dbprefix('expense_items').'.expense_id=' . $expense_id . ') AS total_notax', FALSE);
  62. $this->db->select('(SELECT SUM('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity * ('.$this->db->dbprefix('expenses').'.tax1_rate/100 * '.$this->db->dbprefix('expense_items').'.taxable)) FROM '.$this->db->dbprefix('expense_items').' WHERE '.$this->db->dbprefix('expense_items').'.expense_id=' . $expense_id . ') AS total_tax1', FALSE);
  63. $this->db->select('(SELECT SUM('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity * ('.$this->db->dbprefix('expenses').'.tax2_rate/100 * '.$this->db->dbprefix('expense_items').'.taxable)) FROM '.$this->db->dbprefix('expense_items').' WHERE '.$this->db->dbprefix('expense_items').'.expense_id=' . $expense_id . ') AS total_tax2', FALSE);
  64. $this->db->select('(SELECT SUM('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity + ROUND(('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity * ('.$this->db->dbprefix('expenses').'.tax1_rate/100 + '.$this->db->dbprefix('expenses').'.tax2_rate/100) * '.$this->db->dbprefix('expense_items').'.taxable), 2)) FROM '.$this->db->dbprefix('expense_items').' WHERE '.$this->db->dbprefix('expense_items').'.expense_id=' . $expense_id . ') AS total_with_tax', FALSE);
  65. $this->db->join('vendors', 'expenses.vendor_id = vendors.id');
  66. $this->db->join('expense_items', 'expenses.id = expense_items.expense_id', 'left');
  67. $this->db->groupby('expenses.id');
  68. $this->db->where('expenses.id', $expense_id);
  69. return $this->db->get('expenses');
  70. }
  71. // --------------------------------------------------------------------
  72. function build_short_descriptions()
  73. {
  74. $limit = ($this->config->item('short_description_characters') != '') ? $this->config->item('short_description_characters') : 50;
  75. $short_descriptions = array();
  76. $this->db->select('expense_id, item_description', FALSE);
  77. $this->db->group_by('expense_id');
  78. foreach($this->db->get('expense_items')->result() as $short_desc)
  79. {
  80. $short_descriptions[$short_desc->expense_id] = ($limit == 0) ? '' : '['.character_limiter($short_desc->item_description, $limit).']';
  81. }
  82. return $short_descriptions;
  83. }
  84. // --------------------------------------------------------------------
  85. function getExpenseItems($expense_id)
  86. {
  87. $this->db->where('expense_id', $expense_id);
  88. $this->db->order_by('id', 'ASC');
  89. $items = $this->db->get('expense_items');
  90. if ($items->num_rows() > 0)
  91. {
  92. return $items;
  93. }
  94. else
  95. {
  96. return FALSE;
  97. }
  98. }
  99. // --------------------------------------------------------------------
  100. function getExpenses($offset=0, $limit=100)
  101. {
  102. return $this->_getExpenses(FALSE, FALSE, FALSE, $offset, $limit);
  103. }
  104. // --------------------------------------------------------------------
  105. function getExpensesAJAX ($vendor_id, $client_id = FALSE)
  106. {
  107. return $this->_getExpenses(FALSE, $vendor_id, $client_id);
  108. }
  109. // --------------------------------------------------------------------
  110. function _getExpenses($expense_id, $vendor_id, $client_id=FALSE, $offset=0, $limit=100)
  111. {
  112. // check for any expenses first
  113. if ($this->db->count_all_results('expenses') < 1)
  114. {
  115. return FALSE;
  116. }
  117. if (is_numeric($expense_id))
  118. {
  119. $this->db->where('expenses.id', $expense_id);
  120. }
  121. if (is_numeric($vendor_id))
  122. {
  123. $this->db->where('vendor_id', $vendor_id);
  124. }
  125. else
  126. {
  127. $this->db->where('vendor_id IS NOT NULL');
  128. }
  129. if (is_numeric($client_id))
  130. {
  131. $this->db->where('client_id', $client_id);
  132. }
  133. $this->db->select('expenses.*, vendors.name');
  134. $this->db->select('ROUND((SELECT SUM('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity + ('.$this->db->dbprefix('expense_items').'.amount * '.$this->db->dbprefix('expense_items').'.quantity * ('.$this->db->dbprefix('expenses').'.tax1_rate/100 + '.$this->db->dbprefix('expenses').'.tax2_rate/100) * '.$this->db->dbprefix('expense_items').'.taxable)) FROM '.$this->db->dbprefix('expense_items').' WHERE '.$this->db->dbprefix('expense_items').'.expense_id='.$this->db->dbprefix('expenses').'.id), 2) AS subtotal', FALSE);
  135. $this->db->join('vendors', 'expenses.vendor_id = vendors.id');
  136. $this->db->join('expense_items', 'expenses.id = expense_items.expense_id', 'left');
  137. $this->db->order_by('expense_date desc, expense_number desc');
  138. $this->db->groupby('expenses.id');
  139. $this->db->offset($offset);
  140. $this->db->limit($limit);
  141. return $this->db->get('expenses');
  142. }
  143. // --------------------------------------------------------------------
  144. function lastExpenseNumber($vendor_id)
  145. {
  146. if ($this->config->item('unique_expense_per_vendor') === TRUE)
  147. {
  148. $this->db->where('vendor_id', $vendor_id);
  149. }
  150. $this->db->where('expense_number != ""');
  151. $this->db->orderby("id", "desc");
  152. $this->db->limit(1);
  153. $query = $this->db->get('expenses');
  154. if ($query->num_rows() > 0)
  155. {
  156. return $query->row()->expense_number;
  157. }
  158. else
  159. {
  160. return '0';
  161. }
  162. }
  163. // --------------------------------------------------------------------
  164. function uniqueExpenseNumber($expense_number)
  165. {
  166. $this->db->where('expense_number', $expense_number);
  167. $query = $this->db->get('expenses');
  168. $num_rows = $query->num_rows();
  169. if ($num_rows == 0)
  170. {
  171. return TRUE;
  172. }
  173. else
  174. {
  175. return FALSE;
  176. }
  177. }
  178. // --------------------------------------------------------------------
  179. function uniqueExpenseNumberEdit($expense_number, $expense_id)
  180. {
  181. $this->db->where('expense_number', $expense_number);
  182. $this->db->where('id != ', $expense_id);
  183. $query = $this->db->get('expenses');
  184. $num_rows = $query->num_rows();
  185. if ($num_rows == 0)
  186. {
  187. return TRUE;
  188. }
  189. else
  190. {
  191. return FALSE;
  192. }
  193. }
  194. }
  195. ?>