mirror of
https://github.com/Karaka-Management/oms-Billing.git
synced 2026-02-16 00:08:41 +00:00
impl. todos
This commit is contained in:
parent
45b1733be8
commit
254aba2706
31
Admin/Install/Media.install.json
Normal file
31
Admin/Install/Media.install.json
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "collection",
|
||||||
|
"name": "Billing",
|
||||||
|
"virtualPath": "/Modules",
|
||||||
|
"user": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "collection",
|
||||||
|
"name": "Templates",
|
||||||
|
"virtualPath": "/Modules/Billing",
|
||||||
|
"user": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "collection",
|
||||||
|
"name": "Bills",
|
||||||
|
"virtualPath": "/Modules/Billing",
|
||||||
|
"user": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "upload",
|
||||||
|
"create_collection": true,
|
||||||
|
"name": "Default",
|
||||||
|
"virtualPath": "/Modules/Billing/Templates",
|
||||||
|
"path": "/Modules/Media/Files/Modules/Billing/Templates/Default",
|
||||||
|
"files": [
|
||||||
|
"/Modules/Billing/Admin/Install/Media"
|
||||||
|
],
|
||||||
|
"user": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
43
Admin/Install/Media.php
Normal file
43
Admin/Install/Media.php
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Orange Management
|
||||||
|
*
|
||||||
|
* PHP Version 8.0
|
||||||
|
*
|
||||||
|
* @package Modules\Billing\Admin\Install
|
||||||
|
* @copyright Dennis Eichhorn
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @version 1.0.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
*/
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Modules\Billing\Admin\Install;
|
||||||
|
|
||||||
|
use phpOMS\DataStorage\Database\DatabasePool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Media class.
|
||||||
|
*
|
||||||
|
* @package Modules\Billing\Admin\Install
|
||||||
|
* @license OMS License 1.0
|
||||||
|
* @link https://orange-management.org
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
class Media
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Install media providing
|
||||||
|
*
|
||||||
|
* @param string $path Module path
|
||||||
|
* @param DatabasePool $dbPool Database pool for database interaction
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public static function install(string $path, DatabasePool $dbPool) : void
|
||||||
|
{
|
||||||
|
\Modules\Media\Admin\Installer::installExternal($dbPool, ['path' => __DIR__ . '/Media.install.json']);
|
||||||
|
}
|
||||||
|
}
|
||||||
287
Admin/Install/Media/bill.pdf.php
Normal file
287
Admin/Install/Media/bill.pdf.php
Normal file
|
|
@ -0,0 +1,287 @@
|
||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
use Mpdf\Mpdf;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \phpOMS\Views\View $this
|
||||||
|
*/
|
||||||
|
$bill = $this->getData('bill');
|
||||||
|
|
||||||
|
$mpdf = new Mpdf([
|
||||||
|
'mode' => 'utf-8',
|
||||||
|
'format' => 'A4-L',
|
||||||
|
'orientation' => 'L',
|
||||||
|
'margin_left' => 0,
|
||||||
|
'margin_right' => 0,
|
||||||
|
'margin_top' => 0,
|
||||||
|
'margin_bottom' => 0,
|
||||||
|
'margin_header' => 0,
|
||||||
|
'margin_footer' => 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$mpdf->SetDisplayMode('fullpage');
|
||||||
|
$mpdf->SetTitle($bill->getNumber());
|
||||||
|
$mpdf->SetAuthor('Orange Management');
|
||||||
|
|
||||||
|
$mpdf->AddPage();
|
||||||
|
|
||||||
|
$mpdf->SetHTMLHeader('
|
||||||
|
');
|
||||||
|
|
||||||
|
$mpdf->SetHTMLFooter('
|
||||||
|
');
|
||||||
|
|
||||||
|
$mpdf->WriteHTML('
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body {font-family: sans-serif;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
p { margin: 0pt; }
|
||||||
|
table.items {
|
||||||
|
border: 0.1mm solid #000000;
|
||||||
|
}
|
||||||
|
td { vertical-align: top; }
|
||||||
|
.items td {
|
||||||
|
border-left: 0.1mm solid #000000;
|
||||||
|
border-right: 0.1mm solid #000000;
|
||||||
|
}
|
||||||
|
table thead td { background-color: #EEEEEE;
|
||||||
|
text-align: center;
|
||||||
|
border: 0.1mm solid #000000;
|
||||||
|
font-variant: small-caps;
|
||||||
|
}
|
||||||
|
.items td.blanktotal {
|
||||||
|
background-color: #EEEEEE;
|
||||||
|
border: 0.1mm solid #000000;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border: 0mm none #000000;
|
||||||
|
border-top: 0.1mm solid #000000;
|
||||||
|
border-right: 0.1mm solid #000000;
|
||||||
|
}
|
||||||
|
.items td.totals {
|
||||||
|
text-align: right;
|
||||||
|
border: 0.1mm solid #000000;
|
||||||
|
}
|
||||||
|
.items td.cost {
|
||||||
|
text-align: "." center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!--mpdf
|
||||||
|
<htmlpageheader name="myheader">
|
||||||
|
<table width="100%"><tr>
|
||||||
|
<td width="50%" style="color:#0000BB; "><span style="font-weight: bold; font-size: 14pt;">Acme Trading Co.</span><br />123 Anystreet<br />Your City<br />GD12 4LP<br /><span style="font-family:dejavusanscondensed;">☎</span> 01777 123 567</td>
|
||||||
|
<td width="50%" style="text-align: right;">Invoice No.<br /><span style="font-weight: bold; font-size: 12pt;">0012345</span></td>
|
||||||
|
</tr></table>
|
||||||
|
</htmlpageheader>
|
||||||
|
<htmlpagefooter name="myfooter">
|
||||||
|
<div style="border-top: 1px solid #000000; font-size: 9pt; text-align: center; padding-top: 3mm; ">
|
||||||
|
Page {PAGENO} of {nb}
|
||||||
|
</div>
|
||||||
|
</htmlpagefooter>
|
||||||
|
<sethtmlpageheader name="myheader" value="on" show-this-page="1" />
|
||||||
|
<sethtmlpagefooter name="myfooter" value="on" />
|
||||||
|
mpdf-->
|
||||||
|
<div style="text-align: right">Date: 13th November 2008</div>
|
||||||
|
<table width="100%" style="font-family: serif;" cellpadding="10"><tr>
|
||||||
|
<td width="45%" style="border: 0.1mm solid #888888; "><span style="font-size: 7pt; color: #555555; font-family: sans;">SOLD TO:</span><br /><br />345 Anotherstreet<br />Little Village<br />Their City<br />CB22 6SO</td>
|
||||||
|
<td width="10%"> </td>
|
||||||
|
<td width="45%" style="border: 0.1mm solid #888888;"><span style="font-size: 7pt; color: #555555; font-family: sans;">SHIP TO:</span><br /><br />345 Anotherstreet<br />Little Village<br />Their City<br />CB22 6SO</td>
|
||||||
|
</tr></table>
|
||||||
|
<br />
|
||||||
|
<table class="items" width="100%" style="font-size: 9pt; border-collapse: collapse; " cellpadding="8">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td width="15%">Ref. No.</td>
|
||||||
|
<td width="10%">Quantity</td>
|
||||||
|
<td width="45%">Description</td>
|
||||||
|
<td width="15%">Unit Price</td>
|
||||||
|
<td width="15%">Amount</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<!-- ITEMS HERE -->
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MF1234567</td>
|
||||||
|
<td align="center">10</td>
|
||||||
|
<td>Large pack Hoover bags</td>
|
||||||
|
<td class="cost">£2.56</td>
|
||||||
|
<td class="cost">£25.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MX37801982</td>
|
||||||
|
<td align="center">1</td>
|
||||||
|
<td>Womans waterproof jacket<br />Options - Red and charcoal.</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
<td class="cost">£102.11</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">MR7009298</td>
|
||||||
|
<td align="center">25</td>
|
||||||
|
<td>Steel nails; oval head; 30mm x 3mm. Packs of 1000.</td>
|
||||||
|
<td class="cost">£12.26</td>
|
||||||
|
<td class="cost">£325.60</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END ITEMS HERE -->
|
||||||
|
<tr>
|
||||||
|
<td class="blanktotal" colspan="3" rowspan="6"></td>
|
||||||
|
<td class="totals">Subtotal:</td>
|
||||||
|
<td class="totals cost">£1825.60</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="totals">Tax:</td>
|
||||||
|
<td class="totals cost">£18.25</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="totals">Shipping:</td>
|
||||||
|
<td class="totals cost">£42.56</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="totals"><b>TOTAL:</b></td>
|
||||||
|
<td class="totals cost"><b>£1882.56</b></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="totals">Deposit:</td>
|
||||||
|
<td class="totals cost">£100.00</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="totals"><b>Balance due:</b></td>
|
||||||
|
<td class="totals cost"><b>£1782.56</b></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div style="text-align: center; font-style: italic;">Payment terms: payment due in 30 days</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
');
|
||||||
|
|
||||||
|
$mpdf->Output();
|
||||||
BIN
Admin/Install/Media/logo.png
Executable file
BIN
Admin/Install/Media/logo.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
|
|
@ -41,7 +41,7 @@ use phpOMS\Model\Message\FormValidation;
|
||||||
final class ApiController extends Controller
|
final class ApiController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Api method to create a wiki entry
|
* Api method to create a bill
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request
|
* @param RequestAbstract $request Request
|
||||||
* @param ResponseAbstract $response Response
|
* @param ResponseAbstract $response Response
|
||||||
|
|
@ -68,7 +68,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to create a wiki entry from request.
|
* Method to create a bill from request.
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request
|
* @param RequestAbstract $request Request
|
||||||
* @param ResponseAbstract $response Response
|
* @param ResponseAbstract $response Response
|
||||||
|
|
@ -96,7 +96,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to validate wiki entry creation from request
|
* Method to validate bill creation from request
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request
|
* @param RequestAbstract $request Request
|
||||||
*
|
*
|
||||||
|
|
@ -121,7 +121,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Api method to create a wiki entry
|
* Api method to create a bill element
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request
|
* @param RequestAbstract $request Request
|
||||||
* @param ResponseAbstract $response Response
|
* @param ResponseAbstract $response Response
|
||||||
|
|
@ -153,7 +153,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to create a wiki entry from request.
|
* Method to create a bill element from request.
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request
|
* @param RequestAbstract $request Request
|
||||||
* @param ResponseAbstract $response Response
|
* @param ResponseAbstract $response Response
|
||||||
|
|
@ -197,7 +197,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to create a wiki entry from request.
|
* Method to update a bill because of a changed bill element (add, remove, change) from request.
|
||||||
*
|
*
|
||||||
* @param Bill $bill Bill
|
* @param Bill $bill Bill
|
||||||
* @param BillElement $element Bill element
|
* @param BillElement $element Bill element
|
||||||
|
|
@ -218,7 +218,7 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to validate wiki entry creation from request
|
* Method to validate bill element creation from request
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request
|
* @param RequestAbstract $request Request
|
||||||
*
|
*
|
||||||
|
|
@ -236,4 +236,44 @@ final class ApiController extends Controller
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Api method to create and archive a bill
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param mixed $data Generic data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function apiBillPdfArchiveCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
|
{
|
||||||
|
$this->apiBillPdfCreate($request, $response, $data);
|
||||||
|
// upload pdf to media module
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Api method to create a bill
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param mixed $data Generic data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function apiBillPdfCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
|
{
|
||||||
|
$bill = BillMapper::get($request->getData('id'));
|
||||||
|
|
||||||
|
// get default template from database OR get template based on provided request template id
|
||||||
|
// create pdf based on template
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user