Commit 3e51cdfd authored by Rafael Monnerat's avatar Rafael Monnerat

slapos_accounting: Move Printout Form from vifib_hosting

parent 401643fb
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Cacheable__manager_id</string> </key>
<value> <string>http_cache</string> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SaleInvoiceTransaction_getSlapOSPrintout.css</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<tal:block define="dummy python: request.RESPONSE.setHeader('Content-Type', 'text/css;; charset=utf-8')"/>
/* From http://www.jonathantneal.com/examples/invoice/style.css */
/* reset */
*
{
border: 0;
box-sizing: content-box;
color: inherit;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
line-height: inherit;
list-style: none;
margin: 0;
padding: 0;
text-decoration: none;
vertical-align: top;
}
/* heading */
h1 { font: bold 100% sans-serif; letter-spacing: 0.5em; text-align: center; text-transform: uppercase; }
/* table */
/*table { page-break-inside: avoid}*/
/*tr { page-break-inside:avoid ,page-break-after: avoid,page-break-before:avoid}*/
table { font-size: 75%; table-layout: auto; width: 100%; }
table { border-collapse: separate; border-spacing: 0; }
th, td { padding: 0.7em; position: relative; text-align: left; }
th, td { border-style: solid; }
th { background: #EEE; border: 1px solid #DDD; border-bottom: none; border-right: none;}
td { border-left: 1px solid #DDD; border-bottom: 1px solid #DDD}
tr td:last-child {border-right: 1px solid #DDD}
tr th:last-child {border-right: 1px solid #DDD}
table tr:first-child td {border-top: 1px solid #DDD}
/* page */
html { font: 16px/1 'Open Sans', sans-serif; overflow: auto; padding: 0.5in; }
html { background: #999; cursor: default; }
body { box-sizing: border-box; min-height: 11in; margin: 0 auto; overflow: hidden; padding: 0.5in; width: 8.5in; }
body { background: #FFF; border-radius: 1px; box-shadow: 0 0 1in -0.25in rgba(0, 0, 0, 0.5); }
/* header */
header { margin: 0 0 3em; }
header:after { clear: both; content: ""; display: table; }
header h1 { background: #000; border-radius: 0; color: #FFF; margin: 0 0 1em; padding: 0.5em 0; }
header h1.company { background: none; color: #000; text-align: left; padding: 0.5em 0; margin: 0;}
header h1.invoice { background: none; color: #000; text-align: left; padding: 0.5em 0; margin: 0; font-size: 35px; font-weight: bold; letter-spacing: inherit;}
header address { font-size: 75%; font-style: normal; line-height: 1.25; margin: 0 1em 1em 0; }
header address p { margin: 0 0 0.25em; }
header span { display: block; float: right; }
header span { margin: 0 0 1em 1em; max-height: 25%; max-width: 60%; position: relative; }
header img { max-height: 100%; max-width: 100%; display: block;}
header input { cursor: pointer; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; height: 100%; left: 0; opacity: 0; position: absolute; top: 0; width: 100%; }
header address.left {float: left; }
header address.right {float: right; max-width: 30%;}
/* article */
article, article address, table.meta { margin: 0 0 3em; }
article:after { clear: both; content: ""; display: table; }
/* article h1 { clip: rect(0 0 0 0); position: absolute; } */
article h2:after {
content: ":";
font-size: 1em;
}
article address { float: left; font-size: 120%; }
article h2 { margin-bottom: 10px; }
article address p { margin-bottom: 5px; letter-spacing: 1px;}
/* table meta & balance */
table.meta, table.balance { float: right; width: 40.9%; }
/* table meta */
table.meta th { width: 40%; }
table.meta td { width: 60%; }
table.meta:after, { clear: both; content: ""; display: table; }
/* table items */
table.inventory { clear: both; width: 100%; margin: 0 0 2em; }
table.inventory th { font-weight: bold; text-align: center; }
table.inventory td {padding: 0.97em .7em;}
table.inventory td:nth-child(1) { text-align: left; width: 6%; border-bottom: none}
table.inventory td:nth-child(2) { text-align: left; width: 15%; border-bottom: none}
table.inventory td:nth-child(3) { text-align: left; width: 22%; border-bottom: none }
table.inventory td:nth-child(4) { text-align: right; width: 16%; border-bottom: none }
table.inventory td:nth-child(5) { text-align: left; width: 12%; border-bottom: none }
table.inventory td:nth-child(6) { text-align: right; width: 12%; border-bottom: none}
table.inventory td:nth-child(7) { text-align: right; width: 17%; border-bottom: none}
table.inventory tr:last-child td { border-bottom: 2px solid #DDD}
table.inventory th { border: 2px solid #DDD; border-bottom: none; border-right: none;}
table.inventory td { border-left: 2px solid #DDD; border-bottom: 2px solid #DDD}
table.inventory tr td:last-child {border-right: 2px solid #DDD}
table.inventory tr th:last-child {border-right: 2px solid #DDD}
table.inventory tr:first-child td {border-top: 2px solid #DDD}
/* table balance */
table.balance th { width: 57%; }
table.balance td { width: 40%; }
/*table.balance tr:first-child th, table.balance tr:first-child td { border-top: none; }*/
table.balance td { text-align: right; }
table.balance{ clear: both; }
/* table tax */
table.tax { float: right; clear: both; width: 50%; }
table.tax th { font-weight: bold; text-align: center; }
table.tax td { text-align: right; }
table.tax { margin: 2em 0 2em 0; }
/* table resource */
table.resource td { font-size: 90% }
/* aside */
/* aside h1 { border: none; border-width: 0 0 1px; margin: 0 0 1em; }*/
aside h1 { text-align: left; padding-bottom: 10px;}
aside {margin-top: 20px;}
/* bottom */
footer {
font-size: 0.50em;
width: 100%;
clear: both;
text-align: right;
margin-top: 3em;
}
.line {margin-top: 30px;}
@media print {
* { -webkit-print-color-adjust: exact; }
html { background: none; padding: 0; }
body { box-shadow: none; margin: 0; }
span:empty { display: none; }
.page-break { page-break-before: always; padding-top: 80px; }
tr.page-break td {border-top: 1px solid #DDD}
table.resource tr { page-break-inside:avoid; display:block; position: relative; width: 100%; height: 26px;}
table.resource tr:after { content:''; display:block; clear: both; }
table.resource td, table.resource th { page-break-inside:avoid; overflow: hidden; text-overflow: ellipsis; display: block; float: left; white-space: nowrap;}
table.resource td:nth-child(1) { width: 30px; /* 5% */ }
table.resource td:nth-child(2) { width: 70px; /* 9% */ }
table.resource td:nth-child(3) { width: 178px; /* 25% */ }
table.resource td:nth-child(4) { width: 184px; /* 25% */ }
table.resource td:nth-child(5) { width: 60px; /* 10% */ }
table.resource td:nth-child(6) { width: 99px; /* 12%; */ }
table.resource th:nth-child(1) { width: 29px; }
table.resource th:nth-child(2) { width: 68px; }
table.resource th:nth-child(3) { width: 176px; }
table.resource th:nth-child(4) { width: 182px; }
table.resource th:nth-child(5) { width: 59px; }
table.resource th:nth-child(6) { width: 97px; }
aside h1, table tr th {page-break-inside:avoid; page-break-after: avoid,page-break-before:avoid}
aside.resource {margin-top: 0px;}
.line {margin-top: 0px;}
}
@page { margin: 0; }
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>expand</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SaleInvoiceTransaction_viewSlapOSPrintout</string> </value>
</item>
<item>
<key> <string>output_encoding</string> </key>
<value> <string>utf-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <unicode></unicode> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<!doctype html>
<html tal:define="quantity_renderer nocall:here/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_quantity/render_pdf;
price_renderer nocall:here/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_total_price/render_pdf;
total_not_tax_price_list python: [];
invoice_resource_document python: context.portal_catalog.getResultValue(
portal_type='User Consumption HTML File',
validation_state='shared',
follow_up_uid=context.getUid()
)">
<head>
<meta charset="utf-8">
<title>Invoice</title>
<link rel="stylesheet" href="SaleInvoiceTransaction_getSlapOSPrintout.css">
<link rel="license" href="http://www.opensource.org/licenses/mit-license/">
</head>
<body>
<header>
<address class="left">
<img alt="" src="http://www.vifib.com/legal/VIFIB-Legal/vifib_image/LogoVifib-H100.png" style="max-height: 25%; max-width: 70%;"/>
<h1 class="company" tal:content="python: context.getSourceSectionTitle('SlapOS Company')"></h1>
<tal:block tal:define="source_section_organisation python: context.getSourceSectionValue()">
<p tal:condition="python: source_section_organisation is not None">
<tal:block tal:repeat="line python: source_section_organisation.getDescription('').split('\n')">
<span style="display:block" tal:content="line"></span>
</tal:block>
</p>
<p tal:condition="python: source_section_organisation is not None">
<tal:block tal:repeat="line python: source_section_organisation.getDefaultAddressText('').split('\n')">
<span style="display:block" tal:content="line"></span>
</tal:block>
<tal:block tal:content="python: source_section_organisation.getDefaultRegionTitle()"></tal:block>
</p>
<p tal:content="python: 'Corporate Registration Code: %s' % source_section_organisation.getCorporateRegistrationCode()"></p>
<p tal:content="python: 'VAT Code: %s' % source_section_organisation.getVatCode()"></p>
</tal:block>
</address>
<address class="right">
<h1 class="invoice">Invoice</h1>
</address>
<div style="clear:both"></div>
</header>
<article>
<h2>To</h2>
<address>
<p tal:content="python: context.getDestinationSectionTitle('')"></p>
<tal:block tal:define="destination_section_organisation python: context.getDestinationSectionValue()">
<p tal:condition="python: destination_section_organisation is not None">
<tal:block tal:content="python: destination_section_organisation.getDefaultEmailText('')"></tal:block>
</p>
</tal:block>
</address>
<table class="meta">
<tr>
<th><span>Invoice No</span></th>
<td><span tal:content="python: context.getReference()"></span></td>
</tr>
<tr>
<th><span>Date</span></th>
<td><span tal:content="python: context.getStartDate(DateTime()).strftime('%B %e, %G')"></span></td>
</tr>
<tr>
<th><span>Currency</span></th>
<td><span tal:content="python: context.getPriceCurrencyReference()"></span></td>
</tr>
</table>
<table class="inventory">
<thead>
<tr>
<th><span></span></th>
<th><span>Item</span></th>
<th><span>Description</span></th>
<th><span>Quantity</span></th>
<th><span>Unit</span></th>
<th><span>Unit Price</span></th>
<th><span>Total Price</span></th>
</tr>
</thead>
<tbody>
<tal:block tal:repeat="line python: context.contentValues(portal_type=context.getPortalInvoiceMovementTypeList(),
sort_on=[('int_index', 'ascending'), ('reference', 'ascending')])">
<tr tal:condition="python: line.getUse('') != 'trade/tax'">
<td><span tal:content="python: line.getReference() or line.getIntIndex()"></span></td>
<td><span tal:content="python: line.getResourceReference('')"></span></td>
<td><span tal:content="python: line.getResourceTitle('')"></span></td>
<td><span tal:content="python: quantity_renderer(round(line.getQuantity(), 3))"></span></td>
<td><span tal:content="python: line.getQuantityUnitTitle()"></span></td>
<td><span tal:content="python: price_renderer(line.getPrice())"></span></td>
<td><span tal:content="python: price_renderer(line.getTotalPrice())"></span></td>
<tal:block tal:define="dummy python: total_not_tax_price_list.append(line.getTotalPrice())"></tal:block>
</tr>
</tal:block>
</tbody>
</table>
<table class="balance">
<tr>
<th><span>Total Excluding Tax</span></th>
<td><span tal:content="python: price_renderer(sum(total_not_tax_price_list))"></span></td>
</tr>
<tal:block tal:repeat="line python: context.contentValues(portal_type=context.getPortalInvoiceMovementTypeList(),
sort_on=[('int_index', 'ascending'), ('reference', 'ascending')])">
<tal:block tal:condition="python: line.getUse('') == 'trade/tax'">
<tr>
<th><span>Tax Rate</span></th>
<td><span tal:content="python: '%s%%' % quantity_renderer(quantity_renderer(line.getPrice()*100))"></span></td>
</tr>
<tr>
<th><span>Tax Price</span></th>
<td><span tal:content="python: price_renderer(line.getTotalPrice())"></span></td>
</tr>
</tal:block>
</tal:block>
<tr>
<th><span style="font-weight: bold">Total Including Tax</span></th>
<td><span tal:content="python: price_renderer(here.getTotalPrice())"></span></td>
</tr>
</table>
</article>
<!--aside>
<h1><span>Additional Notes</span></h1>
<div>
<p>A finance charge of 1.5% will be made on unpaid balances after 30 days.</p>
</div>
</aside-->
<tal:block tal:define="aggregated_reference python: context.getCausalityReference(portal_type='Sale Packing List', checked_permission='View');
item_dict python: {}">
<p class='line' tal:condition="python: aggregated_reference">&nbsp;</p>
<aside tal:condition="python: aggregated_reference">
<h1><span>Subscription Details</span></h1>
<tal:block tal:repeat="line python: context.portal_catalog(
portal_type='Sale Packing List Line',
grouping_reference=aggregated_reference,
default_resource_uid=context.service_module.slapos_instance_subscription.getUid(),
sort_on=[('default_aggregate_uid', 'ASC'), ('movement.start_date', 'ASC')])">
<tal:block tal:define="item_uid python: line.getAggregateUid(portal_type='Hosting Subscription');
item_title python: line.getAggregateTitle(portal_type='Hosting Subscription');
start_date python: line.getStartDate();
stop_date python: line.getStopDate();
quantity python: line.getQuantity();
dummy_init python: item_dict.setdefault(item_uid, [item_title, start_date, stop_date, 0]);
dummy_update python: item_dict.update({item_uid: [item_title,
min(item_dict[item_uid][1], start_date),
max(item_dict[item_uid][2], stop_date),
sum([item_dict[item_uid][3], quantity])]});">
</tal:block>
</tal:block>
<table>
<thead>
<tr>
<th><span>Instance</span></th>
<th><span>From</span></th>
<th><span>To</span></th>
<th><span>Quantity</span></th>
</tr>
</thead>
<tbody>
<tr tal:repeat="item_tuple python: item_dict.values()">
<td tal:content="python: item_tuple[0]"></td>
<td tal:content="python: item_tuple[1].strftime('%B %e, %G')"></td>
<td tal:content="python: item_tuple[2].strftime('%B %e, %G')"></td>
<td tal:content="python: quantity_renderer(item_tuple[3])"></td>
</tr>
</tbody>
</table>
</aside>
<p class='line page-break'>&nbsp;</p>
<tal:block tal:condition="python: invoice_resource_document is not None" tal:content="structure python: invoice_resource_document.getData()">
</tal:block>
</tal:block>
<footer>Generated with ERP5 - Open Source ERP suite (www.erp5.org)</footer>
</body>
</html>
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment