Some invoice cleanup, and Task updating conversion

This commit is contained in:
Deon George 2013-06-16 23:36:47 +10:00
parent 6875dc3693
commit 609a72425b
10 changed files with 126 additions and 101 deletions

View File

@ -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();
}
} }
?> ?>

View File

@ -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'),
)),
));
}
} }
?> ?>

View File

@ -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.
*/ */

View File

@ -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

View File

@ -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;

View 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();
}
}
}
?>

View File

@ -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>

View File

@ -1,7 +0,0 @@
<table>
<tr>
<td>Account</td>
<td>Due Date</td>
<td>Inv ID</td>
<td>Amount Due</td>
</tr>

View 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>