2010-11-29 22:41:08 +00:00
< ? php defined ( 'SYSPATH' ) or die ( 'No direct access allowed.' );
/**
* This class supports OSB exporting by rending the exportable items .
*
* @ package OSB
* @ subpackage Export
* @ category Models
* @ author Deon George
* @ copyright ( c ) 2010 Open Source Billing
* @ license http :// dev . osbill . net / license . html
*/
class Model_Payment extends ORMOSB {
// Relationships
protected $_has_many = array (
2011-07-22 01:04:20 +00:00
'payment_item' => array ( 'far_key' => 'id' ),
2010-11-29 22:41:08 +00:00
'invoice' => array ( 'through' => 'payment_item' ),
);
protected $_belongs_to = array (
'account' => array (),
'checkout' => array ( 'foreign_key' => 'checkout_plugin_id' ),
);
2011-08-02 06:20:11 +00:00
protected $_sorting = array (
'date_payment' => 'DESC'
);
2010-11-29 22:41:08 +00:00
2011-07-22 01:04:20 +00:00
protected $_display_filters = array (
'date_payment' => array (
array ( 'Config::date' , array ( ':value' )),
),
'total_amt' => array (
array ( 'Currency::display' , array ( ':value' )),
),
2010-11-29 22:41:08 +00:00
);
/**
* Find all items that are exportable .
*
* @ param int $start List payments that were modified this many days ago
*/
public function export ( $start ) {
return ORM :: factory ( 'payment' )
-> where ( 'date_payment' , '>=' , time () - $start * 86400 )
-> find_all ();
}
2011-08-02 06:20:11 +00:00
/**
* Calculate the remaining balance available for this payment
*/
public function balance ( $format = FALSE ) {
$t = 0 ;
foreach ( $this -> payment_item -> find_all () as $pio )
$t += $pio -> alloc_amt ;
return $format ? Currency :: display ( $this -> total_amt - $t ) : $this -> total_amt - $t ;
}
/**
* Return a list of invoices that this payment is applied to
*/
public function invoices () {
$invoices = array ();
foreach ( $this -> payment_item -> find_all () as $pio )
array_push ( $invoices , $pio -> invoice );
return $invoices ;
}
public function invoicelist () {
return join ( ',' , $this -> invoices ());
}
2011-08-16 02:27:19 +00:00
/** LIST FUNCTIONS **/
public function list_unapplied () {
$pi = array ();
// @todo database suffix needs to be dynamically calculated
foreach ( DB :: Query ( Database :: SELECT ,
2011-10-14 05:44:12 +00:00
sprintf ( 'SELECT A.id AS id,A.total_amt as total_amt FROM ab_%s A LEFT JOIN ab_%s B ON (A.site_id=B.site_id AND A.id=B.payment_id) WHERE (A.refund_status=0 OR A.refund_status IS NULL) GROUP BY A.id HAVING ROUND(SUM(IFNULL(B.alloc_amt,0)),2)!=A.total_amt ORDER BY account_id,payment_id' , 'payment' , 'payment_item' ))
2011-08-16 02:27:19 +00:00
-> execute () as $values ) {
array_push ( $pi , $values [ 'id' ]);
}
return $this -> where ( 'id' , 'IN' , $pi ) -> order_by ( 'account_id' ) -> find_all ();
}
2011-09-27 11:22:13 +00:00
public function list_recent_table () {
// @todo This should be in a config file.
$css = '<style type="text/css">' ;
$css .= 'table.box-left { border: 1px solid #AAAACC; margin-right: auto; }' ;
$css .= 'tr.head { font-weight: bold; }' ;
$css .= 'td.head { font-weight: bold; }' ;
$css .= 'td.right { text-align: right; }' ;
$css .= 'tr.odd { background-color: #FCFCFE; }' ;
$css .= 'tr.even { background-color: #F6F6F8; }' ;
$css .= '</style>' ;
return $css . Table :: display (
$this -> limit ( 10 ) -> find_all (),
25 ,
array (
'id' => array ( 'label' => 'ID' ),
'date_payment' => array ( 'label' => 'Date' ),
'checkout->display("name")' => array ( 'label' => 'Method' ),
'total_amt' => array ( 'label' => 'Total' , 'class' => 'right' ),
'balance(TRUE)' => array ( 'label' => 'Balance' , 'class' => 'right' ),
'invoicelist()' => array ( 'label' => 'Invoices' ),
),
array (
'type' => 'list' ,
));
}
2010-11-29 22:41:08 +00:00
}
2011-08-16 02:27:19 +00:00
?>