Initial Commit of AgileBill Open Source
This commit is contained in:
209
modules/asset_invoice/asset_invoice.inc.php
Normal file
209
modules/asset_invoice/asset_invoice.inc.php
Normal file
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AgileBill - Open Billing Software
|
||||
*
|
||||
* This body of work is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Open AgileBill License
|
||||
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
||||
*
|
||||
* For questions, help, comments, discussion, etc., please join the
|
||||
* Agileco community forums at http://forum.agileco.com/
|
||||
*
|
||||
* @link http://www.agileco.com/
|
||||
* @copyright 2004-2008 Agileco, LLC.
|
||||
* @license http://www.agileco.com/agilebill/license1-4.txt
|
||||
* @author Tony Landis <tony@agileco.com>
|
||||
* @package AgileBill
|
||||
* @version 1.4.93
|
||||
*/
|
||||
|
||||
class asset_invoice
|
||||
{
|
||||
/** get menu of asset pools */
|
||||
function main($var) {
|
||||
|
||||
$db=&DB();
|
||||
$p=AGILE_DB_PREFIX;
|
||||
$rs = $db->Execute("select id,name from {$p}asset_pool");
|
||||
if($rs && $rs->RecordCount()) {
|
||||
global $smarty;
|
||||
$pools=array();
|
||||
while(!$rs->EOF) {
|
||||
array_push($pools, $rs->fields);
|
||||
$rs->MoveNext();
|
||||
}
|
||||
$smarty->assign('pools', $pools);
|
||||
}
|
||||
}
|
||||
|
||||
/** show pending invoices */
|
||||
function invoice($v) {
|
||||
|
||||
// verify pool
|
||||
if(empty($v['pool_id']))
|
||||
return false;
|
||||
else
|
||||
$pool_id = $v['pool_id'];
|
||||
|
||||
$db=&DB();
|
||||
$p=AGILE_DB_PREFIX;
|
||||
|
||||
// get all products ids set for manual assignment or this pool
|
||||
$prodIds=array();
|
||||
$prod = $db->Execute("select id,prod_plugin_data from {$p}product
|
||||
WHERE prod_plugin = 1 and prod_plugin_file = 'ASSET'");
|
||||
if($prod && $prod->RecordCount()) {
|
||||
while(!$prod->EOF) {
|
||||
@$d = unserialize($prod->fields['prod_plugin_data']);
|
||||
|
||||
// is this asset pool
|
||||
if(!empty($d['AssetPool']) && $d['AssetPool'] == $pool_id) {
|
||||
|
||||
array_push($prodIds, $prod->fields['id']);
|
||||
|
||||
// is manual enabled
|
||||
} elseif(!empty($d['manual']) && $d['manual'] == '1') {
|
||||
|
||||
array_push($prodIds, $prod->fields['id']);
|
||||
}
|
||||
$prod->MoveNext();
|
||||
}
|
||||
}
|
||||
|
||||
if(count($prodIds)==0) {
|
||||
echo '<br>No products defined for the selected asset pool or manual assignment.<br>';
|
||||
return false;
|
||||
}
|
||||
|
||||
$rs = $db->Execute($sql="select distinct a.*,
|
||||
b.first_name, b.last_name, b.city, b.state, b.zip from {$p}invoice a
|
||||
join {$p}account b on (a.account_id = b.id)
|
||||
WHERE
|
||||
a.billing_status = 1 AND a.process_status <> 1 AND a.refund_status <> 1
|
||||
AND a.id in
|
||||
( select c.invoice_id from {$p}invoice_item c where
|
||||
c.product_id
|
||||
in (".implode(',', $prodIds).")
|
||||
) ");
|
||||
if($rs && $rs->RecordCount()) {
|
||||
$invoices=array();
|
||||
global $smarty;
|
||||
while(!$rs->EOF) {
|
||||
|
||||
/** select invoice items */
|
||||
$rs2 = $db->Execute("select distinct a.id,a.product_id,a.sku,a.quantity, b.name
|
||||
from {$p}invoice_item a
|
||||
left join {$p}product_translate b on (a.product_id=b.product_id and language_id='".DEFAULT_LANGUAGE."')
|
||||
where a.invoice_id = {$rs->fields['id']}
|
||||
and a.product_id in (".implode(',', $prodIds).")
|
||||
");
|
||||
|
||||
$itemsJs = '';
|
||||
if($rs2 && $rs2->RecordCount()) {
|
||||
$i=0;
|
||||
$jname = 'items_'. $rs->fields['id'];
|
||||
while(!$rs2->EOF) {
|
||||
|
||||
$itemsJs .= "{$jname}[{$i}] = {'id':{$rs2->fields['id']}, 'value':0}; \r\n";
|
||||
|
||||
$rs->fields['items'][] = $rs2->fields;
|
||||
$rs2->MoveNext();
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
$rs->fields['itemsJs'] = $itemsJs;
|
||||
|
||||
array_push($invoices, $rs->fields);
|
||||
$rs->MoveNext();
|
||||
}
|
||||
$smarty->assign('invoices', $invoices);
|
||||
|
||||
/** get available assets for this category */
|
||||
$rs = $db->Execute("select id,asset as name from {$p}asset where status <> 1 and pool_id = ".$db->qstr($pool_id));
|
||||
if($rs && $rs->RecordCount()) {
|
||||
$assets=array();
|
||||
while(!$rs->EOF) {
|
||||
array_push($assets, $rs->fields);
|
||||
$rs->MoveNext();
|
||||
}
|
||||
$smarty->assign('assets', $assets);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** define asset ids for services and approve invoice */
|
||||
function assign($v) {
|
||||
|
||||
@$id = $v['invoice_id'];
|
||||
@$items = $v['items'];
|
||||
|
||||
/** input valid? */
|
||||
if(empty($id) || empty($items) || !is_array($items)) {
|
||||
echo 'Invalid data passed';
|
||||
return false;
|
||||
}
|
||||
|
||||
$db=&DB();
|
||||
$p=AGILE_DB_PREFIX;
|
||||
|
||||
// validate all items set
|
||||
foreach ($items as $key=>$item) {
|
||||
if(empty($item) || $item=='0') {
|
||||
echo 'All items must be assigned';
|
||||
return false;
|
||||
}
|
||||
|
||||
// validate that asset is available
|
||||
$assetRs=$db->Execute("select a.id,a.asset,b.name as poolName from {$p}asset a, {$p}asset_pool b where a.pool_id=b.id and a.status <> 1 and a.id = ".$db->qstr($item));
|
||||
if(!$assetRs || !$assetRs->RecordCount()) {
|
||||
echo "Asset $item is already assigned or non-existant!";
|
||||
return false;
|
||||
} else {
|
||||
$assets[] = array('item'=>$key, 'value'=>$item, 'asset'=> $assetRs->fields['asset'], 'poolname'=>$assetRs->fields['poolName'],);
|
||||
}
|
||||
}
|
||||
|
||||
// loop through each line item and update the product_attr_cart field
|
||||
foreach ($assets as $asset) {
|
||||
|
||||
$item = $asset['item'];
|
||||
$value = $asset['value'];
|
||||
$name = $asset['asset'];
|
||||
$pool = $asset['poolname'];
|
||||
|
||||
$s = $db->GetOne($sql="select product_attr_cart from {$p}invoice_item where id = ".$db->qstr($item)." and invoice_id = ".$db->qstr($id) );
|
||||
if(empty($s)) {
|
||||
$s['AssetId']=$value;
|
||||
} else {
|
||||
$s = unserialize($s);
|
||||
$s['AssetId']=$value;
|
||||
}
|
||||
|
||||
@$ss=serialize($s);
|
||||
|
||||
/** formatting for invoice view */
|
||||
$old='';
|
||||
$oldAttr = $db->Execute("select product_attr from {$p}invoice_item where id = ".$db->qstr($item)." and invoice_id = ".$db->qstr($id) );
|
||||
if($oldAttr && $oldAttr->RecordCount()) $old = $oldAttr->fields['product_attr'];
|
||||
$product_attr = "{$pool}=={$name} (ID: {$value})\r\n".$old;
|
||||
|
||||
/** update invoice */
|
||||
$db->Execute("update {$p}invoice_item set product_attr=".$db->qstr($product_attr).", product_attr_cart=".$db->qstr($ss)." where id = ".$db->qstr($item)." and invoice_id = ".$db->qstr($id) );
|
||||
|
||||
/** update service if exists */
|
||||
$db->Execute("update {$p}service set prod_attr=".$db->qstr($product_attr).", prod_attr_cart=".$db->qstr($ss)." where invoice_item_id = ".$db->qstr($item)." and invoice_id = ".$db->qstr($id) );
|
||||
}
|
||||
|
||||
// process invoice => service
|
||||
require_once(PATH_MODULES.'invoice/invoice.inc.php');
|
||||
$inv = new invoice();
|
||||
$result = $inv->approveInvoice(array('id'=>$id),&$inv);
|
||||
|
||||
if($result)
|
||||
echo 'true';
|
||||
else
|
||||
echo 'Error occurred while approving invoice.';
|
||||
}
|
||||
}
|
||||
?>
|
21
modules/asset_invoice/asset_invoice_construct.xml
Normal file
21
modules/asset_invoice/asset_invoice_construct.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<construct>
|
||||
<module>asset_invoice</module>
|
||||
<name>asset_invoice</name>
|
||||
<table>asset_invoice</table>
|
||||
<dependancy>asset</dependancy>
|
||||
<cache>0</cache>
|
||||
<order_by>name</order_by>
|
||||
<limit>35</limit>
|
||||
<field>
|
||||
<id>
|
||||
<type>I4</type>
|
||||
<unique>1</unique>
|
||||
</id>
|
||||
<name>
|
||||
<type>C(32)</type>
|
||||
</name>
|
||||
</field>
|
||||
<method>0</method>
|
||||
<trigger>0</trigger>
|
||||
</construct>
|
27
modules/asset_invoice/asset_invoice_install.xml
Normal file
27
modules/asset_invoice/asset_invoice_install.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<install>
|
||||
<module_properties>
|
||||
<name>asset_invoice</name>
|
||||
<table>asset_invoice</table>
|
||||
<parent>asset</parent>
|
||||
<notes>Assign assets to pending invoices</notes>
|
||||
<menu_display>1</menu_display>
|
||||
<dependancy>asset</dependancy>
|
||||
<sub_modules></sub_modules>
|
||||
</module_properties>
|
||||
<sql_inserts>
|
||||
<module_method>
|
||||
<search>
|
||||
<name>search</name>
|
||||
<page>%%:main</page>
|
||||
<menu_display>1</menu_display>
|
||||
</search>
|
||||
<invoice>
|
||||
<name>invoice</name>
|
||||
</invoice>
|
||||
<assign>
|
||||
<name>assign</name>
|
||||
</assign>
|
||||
</module_method>
|
||||
</sql_inserts>
|
||||
</install>
|
27
modules/asset_invoice/auth.inc.php
Normal file
27
modules/asset_invoice/auth.inc.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AgileBill - Open Billing Software
|
||||
*
|
||||
* This body of work is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Open AgileBill License
|
||||
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
||||
*
|
||||
* For questions, help, comments, discussion, etc., please join the
|
||||
* Agileco community forums at http://forum.agileco.com/
|
||||
*
|
||||
* @link http://www.agileco.com/
|
||||
* @copyright 2004-2008 Agileco, LLC.
|
||||
* @license http://www.agileco.com/agilebill/license1-4.txt
|
||||
* @author Tony Landis <tony@agileco.com>
|
||||
* @package AgileBill
|
||||
* @version 1.4.93
|
||||
*/
|
||||
|
||||
$auth_methods = Array
|
||||
(
|
||||
Array ('module' => 'asset_invoice', 'method' => 'main'),
|
||||
Array ('module' => 'asset_invoice', 'method' => 'invoice'),
|
||||
Array ('module' => 'asset_invoice', 'method' => 'assign')
|
||||
);
|
||||
?>
|
Reference in New Issue
Block a user