Multi enhancements, including auto serialization, product editing
This commit is contained in:
@@ -62,8 +62,9 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
$days = ORM::factory('invoice')->config('REMIND_DUE');
|
||||
|
||||
foreach (ORM::factory('invoice')->list_due(time()+86400*$days) as $io) {
|
||||
// @todo Use another option to supress reminders
|
||||
// If we have already sent a reminder, we'll skip to the next one.
|
||||
if ($io->remind($key) AND (is_null($x=$this->request->param('id')) OR $x != 'again'))
|
||||
if (($io->remind($key) AND (is_null($x=$this->request->param('id')) OR $x != 'again')) OR ($io->account->invoice_delivery != 1))
|
||||
continue;
|
||||
|
||||
// Send our email
|
||||
@@ -115,8 +116,9 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
$key = 'remind_overdue_'.$notice;
|
||||
|
||||
foreach (ORM::factory('invoice')->list_overdue_billing(time()-86400*$days,FALSE) as $io) {
|
||||
// @todo Use another option to supress reminders
|
||||
// If we have already sent a reminder, we'll skip to the next one.
|
||||
if ($io->remind($key) AND (is_null($x) OR $x != 'again'))
|
||||
if (($io->remind($key) AND (is_null($x=$this->request->param('id')) OR $x != 'again')) OR ($io->account->invoice_delivery != 1))
|
||||
continue;
|
||||
|
||||
// Send our email
|
||||
@@ -148,16 +150,17 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
/**
|
||||
* Generate our services invoices, based on the service next invoice date
|
||||
*
|
||||
* @param int ID Service ID to generate invoice for (optional)
|
||||
* @param int ID Service ID to generate invoice for (optional) - multiple services colon separated
|
||||
*/
|
||||
public function action_services() {
|
||||
// Used to only process X invoices in a row.
|
||||
$max = ORM::factory('invoice')->config('GEN_INV_MAX');
|
||||
|
||||
$action = array();
|
||||
$snd = array(); // Our service next billing dates that need to be updated if this is successful.
|
||||
// Our service next billing dates that need to be updated if this is successful.
|
||||
$snd = array();
|
||||
// Our charges that need to be updated if this is successful.
|
||||
$chgs = array();
|
||||
// If we are invoicing a specific service
|
||||
$sid = is_null($this->request->param('id')) ? NULL : explode(':',$this->request->param('id'));
|
||||
|
||||
// Sort our service by account_id, then we can generate 1 invoice.
|
||||
$svs = ORM::factory('service')->list_invoicesoon()->as_array();
|
||||
Sort::MAsort($svs,'account_id,date_next_invoice');
|
||||
@@ -189,22 +192,19 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
$io->status = TRUE;
|
||||
}
|
||||
|
||||
$ppa = $so->product->get_price_array();
|
||||
// @todo Need to check our recurr_weekday configuration for items that need to be pro-rated and items that are billed on absolute dates.
|
||||
$pdata = Period::details($so->recur_schedule,$so->product->price_recurr_weekday,$so->date_next_invoice,TRUE);
|
||||
$iio = $io->add_item();
|
||||
|
||||
$iio = $io->add_item();
|
||||
$iio->service_id = $so->id;
|
||||
$iio->product_id = $so->product_id;
|
||||
$iio->quantity = $pdata['prorata'];
|
||||
$iio->item_type = 0;
|
||||
$iio->item_type = 0; // Service Billing
|
||||
$iio->discount_amt = null; // @todo
|
||||
$iio->price_type = $so->product->price_type; // @todo Do we need this?
|
||||
// @todo Might be a better way to do this
|
||||
$iio->price_base = $so->price ? $so->price : (isset($ppa[$so->recur_schedule]['price_base']) ? $ppa[$so->recur_schedule]['price_base'] : 0);
|
||||
$iio->price_type = $so->product->price_type;
|
||||
$iio->price_base = $so->price();
|
||||
$iio->recurring_schedule = $so->recur_schedule;
|
||||
$iio->date_start = $pdata['start_time']; // @todo
|
||||
$iio->date_stop = $pdata['end_time']; // @todo
|
||||
$iio->date_start = $pdata['start_time'];
|
||||
$iio->date_stop = $pdata['end_time'];
|
||||
|
||||
// Our service next billing date, if this invoice generation is successful.
|
||||
$snd[$so->id] = $pdata['end_time']+86400;
|
||||
@@ -217,7 +217,6 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
|
||||
foreach ($c->find_all() as $co) {
|
||||
$iio = $io->add_item();
|
||||
|
||||
$iio->service_id = $co->service_id;
|
||||
$iio->product_id = $co->product_id;
|
||||
$iio->charge_id = $co->id;
|
||||
@@ -229,11 +228,11 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
$iio->date_stop = $co->date_orig; // @todo
|
||||
|
||||
// @todo Temp
|
||||
// We'll mark any charges as temporarily processed, although they should be set to status=1 later.
|
||||
$co->status=2;
|
||||
$co->save();
|
||||
array_push($chgs,$co->id);
|
||||
}
|
||||
|
||||
array_push($action,(string)$so->id);
|
||||
}
|
||||
|
||||
// Save our invoice.
|
||||
@@ -243,13 +242,22 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
}
|
||||
|
||||
// Update our service next billing dates.
|
||||
// @todo Catch any update errors
|
||||
foreach ($snd as $sid=>$date) {
|
||||
$so = ORM::factory('service',$sid);
|
||||
$so->date_next_invoice = $date;
|
||||
$so->save();
|
||||
}
|
||||
|
||||
$this->response->body(_('Services Invoiced: ').join('|',$action));
|
||||
// Update any processed charges as such
|
||||
// @todo Catch any update errors
|
||||
foreach ($chgs as $cid) {
|
||||
$co = ORM::factory('charge',$cid);
|
||||
$co->status=1;
|
||||
$co->save();
|
||||
}
|
||||
|
||||
$this->response->body(_('Services Invoiced: ').join('|',array_keys($snd)));
|
||||
}
|
||||
|
||||
public function action_send() {
|
||||
@@ -270,8 +278,8 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
|
||||
$max_count = 0;
|
||||
foreach ($i->find_all() as $io) {
|
||||
// If we have already sent a reminder, we'll skip to the next one.
|
||||
if ($io->remind($key) AND (is_null($x) OR $x != 'again'))
|
||||
// If we have already sent a reminder or we dont email invoices we'll skip to the next one.
|
||||
if (($io->remind($key) AND (is_null($x) OR $x != 'again')) OR ($io->account->invoice_delivery != 1))
|
||||
continue;
|
||||
|
||||
// If we have issued the max number of invoices this round, finish.
|
||||
@@ -303,7 +311,7 @@ class Controller_Task_Invoice extends Controller_Task {
|
||||
// @todo Record email log id if possible.
|
||||
if ($et->send()) {
|
||||
$io->print_status = 1;
|
||||
$io->set_remind($key,time());
|
||||
$io->set_remind($key,time(),($x=='again' ? TRUE : FALSE));
|
||||
array_push($action,(string)$io);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user