Some invoice cleanup, and Task updating conversion
This commit is contained in:
parent
f95ff0d3e7
commit
1891e9073f
@ -16,8 +16,22 @@ class Model_RTM extends ORM_OSB {
|
|||||||
protected $_has_many = array(
|
protected $_has_many = array(
|
||||||
'customer' => array('model'=>'account','far_key'=>'id','foreign_key'=>'rtm_id'),
|
'customer' => array('model'=>'account','far_key'=>'id','foreign_key'=>'rtm_id'),
|
||||||
'agent' => array('model'=>'rtm','far_key'=>'id','foreign_key'=>'parent_id'),
|
'agent' => array('model'=>'rtm','far_key'=>'id','foreign_key'=>'parent_id'),
|
||||||
|
'supplier' => array('model'=>'rtm','far_key'=>'parent_id','foreign_key'=>'id'),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
public function agents(Model_RTM $rtmo) {
|
||||||
|
$result = array($rtmo);
|
||||||
|
|
||||||
|
foreach ($rtmo->agents_direct() as $artmo)
|
||||||
|
$result = Arr::merge($result,$rtmo->agents($artmo));
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function agents_direct() {
|
||||||
|
return $this->agent->find_all();
|
||||||
|
}
|
||||||
|
|
||||||
public function customers(Model_RTM $rtmo) {
|
public function customers(Model_RTM $rtmo) {
|
||||||
// If our RTM is NULL, then we are our only customer.
|
// If our RTM is NULL, then we are our only customer.
|
||||||
if (is_null($rtmo->id))
|
if (is_null($rtmo->id))
|
||||||
@ -34,12 +48,31 @@ class Model_RTM extends ORM_OSB {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function agents_direct() {
|
|
||||||
return $this->agent->find_all();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function customers_direct() {
|
public function customers_direct() {
|
||||||
return $this->customer->find_all();
|
return $this->customer->find_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function peers() {
|
||||||
|
$result = array();
|
||||||
|
|
||||||
|
foreach (ORM::factory('RTM')->where('id','=',$this->id)->find_all() as $rtmo)
|
||||||
|
array_push($result,$rtmo->account);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function suppliers(Model_RTM $rtmo) {
|
||||||
|
$result = array($rtmo);
|
||||||
|
|
||||||
|
foreach ($rtmo->suppliers_direct() as $srtmo)
|
||||||
|
$result = Arr::merge($result,$rtmo->suppliers($srtmo));
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function suppliers_direct() {
|
||||||
|
return $this->supplier->find_all();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -8,14 +8,9 @@
|
|||||||
* @author Deon George
|
* @author Deon George
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
* @copyright (c) 2009-2013 Open Source Billing
|
||||||
* @license http://dev.osbill.net/license.html
|
* @license http://dev.osbill.net/license.html
|
||||||
*
|
|
||||||
* Column Definitions:
|
|
||||||
* + price_type: 0=One Time, 1=Recurring, 2=Trial, 3=Extra Item
|
|
||||||
* + item_type: 0=MAIN Service Item,2=?,3=?,4=Connection/Setup,5=Excess Service Item,6=Change Service,126=Payment Fee,127=Late Fee
|
|
||||||
*/
|
*/
|
||||||
class Controller_Admin_Invoice extends Controller_TemplateDefault_Admin {
|
class Controller_Admin_Invoice extends Controller_Invoice {
|
||||||
protected $secure_actions = array(
|
protected $secure_actions = array(
|
||||||
'list'=>TRUE,
|
|
||||||
'setup'=>TRUE,
|
'setup'=>TRUE,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -34,39 +29,5 @@ class Controller_Admin_Invoice extends Controller_TemplateDefault_Admin {
|
|||||||
'TAX_ID_NAME'=>_('TAX ID name shown on invoices'),
|
'TAX_ID_NAME'=>_('TAX ID name shown on invoices'),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Show a list of invoices
|
|
||||||
*/
|
|
||||||
public function action_list() {
|
|
||||||
$id = $this->request->param('id');
|
|
||||||
|
|
||||||
$invs = ORM::factory('Invoice');
|
|
||||||
|
|
||||||
if ($id)
|
|
||||||
$invs->where('account_id','=',$id);
|
|
||||||
|
|
||||||
Block::add(array(
|
|
||||||
'title'=>_('System Customer Invoices'),
|
|
||||||
'body'=>Table::display(
|
|
||||||
$invs->find_all(),
|
|
||||||
25,
|
|
||||||
array(
|
|
||||||
'id'=>array('label'=>'ID','url'=>URL::link('user','invoice/view/')),
|
|
||||||
'date_orig'=>array('label'=>'Date'),
|
|
||||||
'total(TRUE)'=>array('label'=>'Total','class'=>'right'),
|
|
||||||
'total_credits(TRUE)'=>array('label'=>'Credits','class'=>'right'),
|
|
||||||
'payments_total(TRUE)'=>array('label'=>'Payments','class'=>'right'),
|
|
||||||
'due(TRUE)'=>array('label'=>'Still Due','class'=>'right'),
|
|
||||||
'account->accnum()'=>array('label'=>'Cust ID'),
|
|
||||||
'account->name()'=>array('label'=>'Customer'),
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'page'=>TRUE,
|
|
||||||
'type'=>'select',
|
|
||||||
'form'=>URL::link('user','invoice/view'),
|
|
||||||
)),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -12,48 +12,6 @@
|
|||||||
class Controller_Task_Invoice extends Controller_Task {
|
class Controller_Task_Invoice extends Controller_Task {
|
||||||
public $auto_render = FALSE;
|
public $auto_render = FALSE;
|
||||||
|
|
||||||
/**
|
|
||||||
* Email a list of invoice balances
|
|
||||||
*
|
|
||||||
* This function is typically used to list the overdue invoices to the admins
|
|
||||||
* @param string mode The callback method to use as the data list eg: overdue
|
|
||||||
*/
|
|
||||||
public function action_list() {
|
|
||||||
$mode = $this->request->param('id');
|
|
||||||
|
|
||||||
$i = ORM::factory('Invoice');
|
|
||||||
$tm = 'list_'.$mode;
|
|
||||||
|
|
||||||
if (! method_exists($i,$tm))
|
|
||||||
throw new Kohana_Exception('Unknown Task List command :command',array(':command'=>$mode));
|
|
||||||
|
|
||||||
$total = $numinv = 0;
|
|
||||||
$duelist = View::factory('invoice/task/'.$tm.'_head');
|
|
||||||
foreach ($i->$tm() as $t) {
|
|
||||||
$duelist .= View::factory('invoice/task/'.$tm.'_body')
|
|
||||||
->set('io',$t);
|
|
||||||
|
|
||||||
$numinv++;
|
|
||||||
$total += $t->due();
|
|
||||||
}
|
|
||||||
$duelist .= View::factory('invoice/task/'.$tm.'_foot');
|
|
||||||
|
|
||||||
// Send our email
|
|
||||||
$et = Email_Template::instance('task_invoice_list_overdue');
|
|
||||||
|
|
||||||
// @todo Update this to be dynamic
|
|
||||||
$et->to = array('account'=>array(1,68));
|
|
||||||
$et->variables = array(
|
|
||||||
'TABLE'=>$duelist,
|
|
||||||
'NUM_INV'=>$numinv,
|
|
||||||
'TOTAL'=>$total,
|
|
||||||
);
|
|
||||||
$et->send();
|
|
||||||
|
|
||||||
$output = sprintf('List (%s) sent to: %s',$mode,implode(',',array_keys($et->to)));
|
|
||||||
$this->response->body($output);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Email a customers a reminder of their upcoming invoices that are due.
|
* Email a customers a reminder of their upcoming invoices that are due.
|
||||||
*/
|
*/
|
||||||
|
@ -8,6 +8,9 @@
|
|||||||
* @author Deon George
|
* @author Deon George
|
||||||
* @copyright (c) 2009-2013 Open Source Billing
|
* @copyright (c) 2009-2013 Open Source Billing
|
||||||
* @license http://dev.osbill.net/license.html
|
* @license http://dev.osbill.net/license.html
|
||||||
|
*
|
||||||
|
* Column Definitions:
|
||||||
|
* + item_type: 0=MAIN Service Item,2=?,3=?,4=Connection/Setup,5=Excess Service Item,6=Change Service,126=Payment Fee,127=Late Fee
|
||||||
*/
|
*/
|
||||||
class Model_Invoice_Item extends ORM_OSB implements Invoicable {
|
class Model_Invoice_Item extends ORM_OSB implements Invoicable {
|
||||||
// Relationships
|
// Relationships
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* @copyright (c) 2009-2013 Open Source Billing
|
* @copyright (c) 2009-2013 Open Source Billing
|
||||||
* @license http://dev.osbill.net/license.html
|
* @license http://dev.osbill.net/license.html
|
||||||
*/
|
*/
|
||||||
class Task_Invoice_Complete extends Task {
|
class Task_Invoice_Complete extends Minion_Task {
|
||||||
protected function _execute(array $params) {
|
protected function _execute(array $params) {
|
||||||
$c = 0;
|
$c = 0;
|
||||||
|
|
||||||
|
64
modules/invoice/classes/Task/Invoice/Listoverdue.php
Normal file
64
modules/invoice/classes/Task/Invoice/Listoverdue.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send Reseller Admins a list of overdue invoices.
|
||||||
|
*
|
||||||
|
* @package Invoice
|
||||||
|
* @category Tasks
|
||||||
|
* @author Deon George
|
||||||
|
* @copyright (c) 2009-2013 Open Source Billing
|
||||||
|
* @license http://dev.osbill.net/license.html
|
||||||
|
*/
|
||||||
|
class Task_Invoice_Listoverdue extends Minion_Task {
|
||||||
|
protected function _execute(array $params) {
|
||||||
|
$overdue = ORM::factory('Invoice')->list_overdue();
|
||||||
|
|
||||||
|
$rtms = $invoices = array();
|
||||||
|
foreach ($overdue as $io)
|
||||||
|
$invoices[$io->account->rtm_id][] = $io;
|
||||||
|
|
||||||
|
// Work out which suppliers should be notified.
|
||||||
|
foreach (array_keys($invoices) as $rtm_id)
|
||||||
|
foreach (ORM::factory('RTM')->suppliers(ORM::factory('RTM',$rtm_id)) as $rtmo)
|
||||||
|
if (empty($rtms[$rtmo->id]))
|
||||||
|
$rtms[$rtmo->id] = $rtmo;
|
||||||
|
|
||||||
|
// Send an email to each supplier, with their list of overdue invoices.
|
||||||
|
foreach ($rtms as $rtmo) {
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
$output .= sprintf('Hi, %s, here are the outstanding invoices of your customers.',$rtmo->name)."\n\n";
|
||||||
|
|
||||||
|
$rtmp = array();
|
||||||
|
foreach ($rtmo->agents($rtmo) as $artmo) {
|
||||||
|
// If we have included this reseller ID or there are no invoices
|
||||||
|
if (in_array($artmo->id,$rtmp) OR empty($invoices[$artmo->id]))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
array_push($rtmp,$artmo->id);
|
||||||
|
|
||||||
|
$rtm_invoices = array();
|
||||||
|
$total = 0;
|
||||||
|
|
||||||
|
foreach ($invoices[$artmo->id] as $o) {
|
||||||
|
array_push($rtm_invoices,$o);
|
||||||
|
$total += $o->due();
|
||||||
|
}
|
||||||
|
|
||||||
|
$output .= View::factory('invoice/task/listoverdue')->set('rtmo',$artmo)->set('o',$rtm_invoices);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send our email
|
||||||
|
$et = Email_Template::instance('task_invoice_list_overdue');
|
||||||
|
$et->to = array('account'=>$rtmo->peers());
|
||||||
|
$et->variables = array(
|
||||||
|
'TABLE'=>$output,
|
||||||
|
'NUM_INV'=>count($rtm_invoices),
|
||||||
|
'TOTAL'=>$total,
|
||||||
|
);
|
||||||
|
|
||||||
|
$et->send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -1,6 +0,0 @@
|
|||||||
<tr>
|
|
||||||
<td><?php echo $io->account->name(); ?></td>
|
|
||||||
<td><?php echo $io->display('due_date'); ?></td>
|
|
||||||
<td><?php echo $io->id(); ?></td>
|
|
||||||
<td><?php echo $io->due(TRUE); ?></td>
|
|
||||||
</tr>
|
|
@ -1 +0,0 @@
|
|||||||
</table>
|
|
@ -1,7 +0,0 @@
|
|||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td>Account</td>
|
|
||||||
<td>Due Date</td>
|
|
||||||
<td>Inv ID</td>
|
|
||||||
<td>Amount Due</td>
|
|
||||||
</tr>
|
|
20
modules/invoice/views/invoice/task/listoverdue.php
Normal file
20
modules/invoice/views/invoice/task/listoverdue.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<h3><?php echo $rtmo->name; ?></h3>
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th>Account</th>
|
||||||
|
<th>Due Date</th>
|
||||||
|
<th>Inv ID</th>
|
||||||
|
<th>Amount Due</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<?php foreach ($o as $io) : ?>
|
||||||
|
<tr>
|
||||||
|
<td><?php echo $io->account->name(); ?></td>
|
||||||
|
<td><?php echo $io->display('due_date'); ?></td>
|
||||||
|
<td><?php echo $io->id(); ?></td>
|
||||||
|
<td><?php echo $io->due(TRUE); ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach ?>
|
||||||
|
|
||||||
|
</table>
|
Reference in New Issue
Block a user