mirror of
https://github.com/Karaka-Management/oms-Billing.git
synced 2026-01-30 08:18: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
|
||||
{
|
||||
/**
|
||||
* Api method to create a wiki entry
|
||||
* Api method to create a bill
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @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 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
|
||||
*
|
||||
|
|
@ -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 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 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 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
|
||||
*
|
||||
|
|
@ -236,4 +236,44 @@ final class ApiController extends Controller
|
|||
|
||||
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