Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos.core
Commits
bdc5ffc3
Commit
bdc5ffc3
authored
Jan 08, 2013
by
Romain Courteaud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create a custom html invoice printout.
parent
56098812
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
437 additions
and
2 deletions
+437
-2
master/bt5/slapos_web/SkinTemplateItem/portal_skins/vifib_hosting/SaleInvoiceTransaction_getDefaultPrintUrl.xml
...fib_hosting/SaleInvoiceTransaction_getDefaultPrintUrl.xml
+1
-1
master/bt5/slapos_web/SkinTemplateItem/portal_skins/vifib_hosting/SaleInvoiceTransaction_getSlapOSPrintout.css.xml
..._hosting/SaleInvoiceTransaction_getSlapOSPrintout.css.xml
+195
-0
master/bt5/slapos_web/SkinTemplateItem/portal_skins/vifib_hosting/SaleInvoiceTransaction_viewSlapOSPrintout.xml
...fib_hosting/SaleInvoiceTransaction_viewSlapOSPrintout.xml
+240
-0
master/bt5/slapos_web/bt/revision
master/bt5/slapos_web/bt/revision
+1
-1
No files found.
master/bt5/slapos_web/SkinTemplateItem/portal_skins/vifib_hosting/SaleInvoiceTransaction_getDefaultPrintUrl.xml
View file @
bdc5ffc3
...
...
@@ -50,7 +50,7 @@
</item>
<item>
<key>
<string>
_body
</string>
</key>
<value>
<string>
return "%s/
Invoice_printAsODT?format=pdf
" % context.absolute_url()\n
<value>
<string>
return "%s/
SaleInvoiceTransaction_viewSlapOSPrintout
" % context.absolute_url()\n
</string>
</value>
</item>
<item>
...
...
master/bt5/slapos_web/SkinTemplateItem/portal_skins/vifib_hosting/SaleInvoiceTransaction_getSlapOSPrintout.css.xml
0 → 100644
View file @
bdc5ffc3
<?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>
_text
</string>
</key>
<value>
<unicode
encoding=
"cdata"
>
<![CDATA[
<tal:block define="dummy python: request.RESPONSE.setHeader(\'Content-Type\', \'text/css;; charset=utf-8\')"/>
\n
/* From http://www.jonathantneal.com/examples/invoice/style.css */\n
/* reset */\n
\n
*\n
{\n
border: 0;\n
box-sizing: content-box;\n
color: inherit;\n
font-family: inherit;\n
font-size: inherit;\n
font-style: inherit;\n
font-weight: inherit;\n
line-height: inherit;\n
list-style: none;\n
margin: 0;\n
padding: 0;\n
text-decoration: none;\n
vertical-align: top;\n
}\n
\n
/* heading */\n
\n
h1 { font: bold 100% sans-serif; letter-spacing: 0.5em; text-align: center; text-transform: uppercase; }\n
\n
/* table */\n
\n
table { font-size: 75%; table-layout: fixed; width: 100%; }\n
table { border-collapse: separate; border-spacing: 2px; }\n
th, td { border-width: 1px; padding: 0.5em; position: relative; text-align: left; }\n
th, td { border-radius: 0.25em; border-style: solid; }\n
th { background: #EEE; border-color: #BBB; }\n
td { border-color: #DDD; }\n
\n
/* page */\n
\n
html { font: 16px/1 \'Open Sans\', sans-serif; overflow: auto; padding: 0.5in; }\n
html { background: #999; cursor: default; }\n
\n
body { box-sizing: border-box; min-height: 11in; margin: 0 auto; overflow: hidden; padding: 0.5in; width: 8.5in; }\n
body { background: #FFF; border-radius: 1px; box-shadow: 0 0 1in -0.25in rgba(0, 0, 0, 0.5); }\n
\n
/* header */\n
\n
header { margin: 0 0 3em; }\n
header:after { clear: both; content: ""; display: table; }\n
\n
header h1 { background: #000; border-radius: 0.25em; color: #FFF; margin: 0 0 1em; padding: 0.5em 0; }\n
header address { float: left; font-size: 75%; font-style: normal; line-height: 1.25; margin: 0 1em 1em 0; }\n
header address p { margin: 0 0 0.25em; }\n
header span, header img { display: block; float: right; }\n
header span { margin: 0 0 1em 1em; max-height: 25%; max-width: 60%; position: relative; }\n
header img { max-height: 100%; max-width: 100%; }\n
header input { cursor: pointer; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; height: 100%; left: 0; opacity: 0; position: absolute; top: 0; width: 100%; }\n
\n
/* article */\n
\n
article, article address, table.meta { margin: 0 0 3em; }\n
article:after { clear: both; content: ""; display: table; }\n
/* article h1 { clip: rect(0 0 0 0); position: absolute; } */\n
article h2:after { \n
content: ":";\n
font-size: 1em;\n
}\n
\n
article address { float: left; font-size: 125%; font-weight: bold; }\n
\n
/* table meta
&
balance */\n
\n
table.meta, table.balance { float: right; width: 46%; }\n
\n
/* table meta */\n
\n
table.meta th { width: 40%; }\n
table.meta td { width: 60%; }\n
table.meta:after, { clear: both; content: ""; display: table; }\n
\n
/* table items */\n
\n
table.inventory { clear: both; width: 100%; margin: 0 0 2em; }\n
table.inventory th { font-weight: bold; text-align: center; }\n
\n
table.inventory td:nth-child(1) { text-align: left; width: 26%; }\n
table.inventory td:nth-child(2) { text-align: right; width: 38%; }\n
table.inventory td:nth-child(3) { text-align: left; width: 12%; }\n
table.inventory td:nth-child(4) { text-align: right; width: 12%; }\n
table.inventory td:nth-child(5) { text-align: left; width: 12%; }\n
table.inventory td:nth-child(6) { text-align: right; width: 12%; }\n
table.inventory td:nth-child(7) { text-align: right; width: 12%; }\n
\n
/* table balance */\n
\n
table.balance th, table.balance td { width: 50%; }\n
table.balance td { text-align: right; }\n
table.balance{ clear: both; }\n
\n
/* table tax */\n
\n
table.tax { float: right; clear: both; width: 50%; }\n
table.tax th { font-weight: bold; text-align: center; }\n
table.tax td { text-align: right; }\n
table.tax { margin: 2em 0 2em 0; }\n
\n
/* aside */\n
\n
aside h1 { border: none; border-width: 0 0 1px; margin: 0 0 1em; }\n
aside h1 { border-color: #999; border-bottom-style: solid; }\n
\n
/* bottom */\n
\n
footer {\n
font-size: 0.50em;\n
width: 100%;\n
clear: both;\n
text-align: right;\n
margin-top: 3em;\n
}\n
\n
@media print {\n
* { -webkit-print-color-adjust: exact; }\n
html { background: none; padding: 0; }\n
body { box-shadow: none; margin: 0; }\n
span:empty { display: none; }\n
}\n
\n
@page { margin: 0; }
]]>
</unicode>
</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>
master/bt5/slapos_web/SkinTemplateItem/portal_skins/vifib_hosting/SaleInvoiceTransaction_viewSlapOSPrintout.xml
0 → 100644
View file @
bdc5ffc3
<?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>
_text
</string>
</key>
<value>
<unicode
encoding=
"cdata"
>
<![CDATA[
<!doctype html>
\n
<html
tal:define=
"quantity_renderer nocall:here/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_quantity/render_pdf;\n
price_renderer nocall:here/portal_skins/erp5_trade/Base_viewTradeFieldLibrary/my_view_mode_total_price/render_pdf;\n
total_not_tax_price_list python: [];"
>
\n
<head>
\n
<meta
charset=
"utf-8"
>
\n
<title>
Invoice
</title>
\n
<link
rel=
"stylesheet"
href=
"SaleInvoiceTransaction_getSlapOSPrintout.css"
>
\n
<link
rel=
"license"
href=
"http://www.opensource.org/licenses/mit-license/"
>
\n
</head>
\n
<body>
\n
<header>
\n
<h1>
Invoice
</h1>
\n
<address>
\n
<p
tal:content=
"python: context.getSourceSectionTitle(\'SlapOS Company\')"
></p>
\n
<tal:block
tal:define=
"source_section_organisation python: context.getSourceSectionValue()"
>
\n
<p
tal:condition=
"python: source_section_organisation is not None"
>
\n
<tal:block
tal:repeat=
"line python: source_section_organisation.getDescription(\'\').split(\'\\n\')"
>
\n
<tal:block
tal:content=
"line"
></tal:block><br/>
\n
</tal:block>
\n
</p>
\n
<p
tal:condition=
"python: source_section_organisation is not None"
>
\n
<tal:block
tal:repeat=
"line python: source_section_organisation.getDefaultAddressText(\'\').split(\'\\n\')"
>
\n
<tal:block
tal:content=
"line"
></tal:block><br/>
\n
</tal:block>
\n
<tal:block
tal:content=
"python: source_section_organisation.getDefaultRegionTitle()"
></tal:block>
\n
</p>
\n
<p
tal:content=
"python: \'Corporate Registration Code: %s\' % source_section_organisation.getCorporateRegistrationCode()"
></p>
\n
<p
tal:content=
"python: \'VAT Code: %s\' % source_section_organisation.getVatCode()"
></p>
\n
</tal:block>
\n
</address>
\n
<span><img
alt=
""
src=
"http://www.vifib.com/legal/VIFIB-Legal/vifib_image/LogoVifib-H100.png"
></span>
\n
</header>
\n
<article>
\n
<h2>
Client
</h2>
\n
<address>
\n
<p
tal:content=
"python: context.getDestinationSectionTitle(\'\')"
></p>
\n
<tal:block
tal:define=
"destination_section_organisation python: context.getDestinationSectionValue()"
>
\n
<p
tal:condition=
"python: destination_section_organisation is not None"
>
\n
<tal:block
tal:content=
"python: destination_section_organisation.getDefaultEmailText(\'\')"
></tal:block>
\n
</p>
\n
</tal:block>
\n
</address>
\n
<table
class=
"meta"
>
\n
<tr>
\n
<th><span>
Invoice #
</span></th>
\n
<td><span
tal:content=
"python: context.getReference()"
></span></td>
\n
</tr>
\n
<tr>
\n
<th><span>
Date
</span></th>
\n
<td><span
tal:content=
"python: context.getStartDate(DateTime()).strftime(\'%B %e, %G\')"
></span></td>
\n
</tr>
\n
<tr>
\n
<th><span>
Currency
</span></th>
\n
<td><span
tal:content=
"python: context.getPriceCurrencyReference()"
></span></td>
\n
</tr>
\n
</table>
\n
<table
class=
"inventory"
>
\n
<thead>
\n
<tr>
\n
<th><span>
Line
</span></th>
\n
<th><span>
Item
</span></th>
\n
<th><span>
Description
</span></th>
\n
<th><span>
Quantity
</span></th>
\n
<th><span>
Unit
</span></th>
\n
<th><span>
Unit Price
</span></th>
\n
<th><span>
Total Price
</span></th>
\n
</tr>
\n
</thead>
\n
<tbody>
\n
<tal:block
tal:repeat=
"line python: context.contentValues(portal_type=context.getPortalInvoiceMovementTypeList(),\n
sort_on=[(\'int_index\', \'ascending\'), (\'reference\', \'ascending\')])"
>
\n
<tr
tal:condition=
"python: line.getUse(\'\') != \'trade/tax\'"
>
\n
<td><span
tal:content=
"python: line.getReference() or line.getIntIndex()"
></span></td>
\n
<td><span
tal:content=
"python: line.getResourceReference(\'\')"
></span></td>
\n
<td><span
tal:content=
"python: line.getResourceTitle(\'\')"
></span></td>
\n
<td><span
tal:content=
"python: quantity_renderer(line.getQuantity())"
></span></td>
\n
<td><span
tal:content=
"python: line.getQuantityUnitTitle()"
></span></td>
\n
<td><span
tal:content=
"python: price_renderer(line.getPrice())"
></span></td>
\n
<td><span
tal:content=
"python: price_renderer(line.getTotalPrice())"
></span></td>
\n
<tal:block
tal:define=
"dummy python: total_not_tax_price_list.append(line.getTotalPrice())"
></tal:block>
\n
</tr>
\n
</tal:block>
\n
</tbody>
\n
</table>
\n
<table
class=
"balance"
>
\n
<tr>
\n
<th><span>
Total Excluding Tax
</span></th>
\n
<td><span
tal:content=
"python: price_renderer(sum(total_not_tax_price_list))"
></span></td>
\n
</tr>
\n
</table>
\n
<table
class=
"tax"
>
\n
<thead>
\n
<tr>
\n
<th><span>
Amount
</span></th>
\n
<th><span>
Rate
</span></th>
\n
<th><span>
Tax Price
</span></th>
\n
</tr>
\n
</thead>
\n
<tbody>
\n
<tal:block
tal:repeat=
"line python: context.contentValues(portal_type=context.getPortalInvoiceMovementTypeList(),\n
sort_on=[(\'int_index\', \'ascending\'), (\'reference\', \'ascending\')])"
>
\n
<tr
tal:condition=
"python: line.getUse(\'\') == \'trade/tax\'"
>
\n
<td><span
tal:content=
"python: price_renderer(line.getQuantity())"
></span></td>
\n
<td><span
tal:content=
"python: \'%s%%\' % quantity_renderer(quantity_renderer(line.getPrice()*100))"
></span></td>
\n
<td><span
tal:content=
"python: price_renderer(line.getTotalPrice())"
></span></td>
\n
</tr>
\n
</tal:block>
\n
</tbody>
\n
</table>
\n
<table
class=
"balance"
>
\n
<tr>
\n
<th><span>
Total Including Tax
</span></th>
\n
<td><span
tal:content=
"python: price_renderer(here.getTotalPrice())"
></span></td>
\n
</tr>
\n
</table>
\n
</article>
\n
<!--aside>\n
<h1><span>Additional Notes</span></h1>\n
<div>\n
<p>A finance charge of 1.5% will be made on unpaid balances after 30 days.</p>\n
</div>\n
</aside-->
\n
\n
<tal:block
tal:define=
"aggregated_reference python: context.getCausalityReference(portal_type=\'Sale Packing List\', checked_permission=\'View\');\n
item_dict python: {}"
>
\n
<aside
tal:condition=
"python: aggregated_reference"
>
\n
<h1><span>
Subscription Details
</span></h1>
\n
<tal:block
tal:repeat=
"line python: context.portal_catalog(\n
portal_type=\'Sale Packing List Line\',\n
grouping_reference=aggregated_reference,\n
default_resource_uid=context.service_module.slapos_instance_subscription.getUid(),\n
sort_on=[(\'default_aggregate_uid\', \'ASC\'), (\'movement.start_date\', \'ASC\')])"
>
\n
<tal:block
tal:define=
"item_uid python: line.getAggregateUid(portal_type=\'Hosting Subscription\');\n
item_title python: line.getAggregateTitle(portal_type=\'Hosting Subscription\');\n
start_date python: line.getStartDate();\n
stop_date python: line.getStopDate();\n
quantity python: line.getQuantity();\n
dummy_init python: item_dict.setdefault(item_uid, [item_title, start_date, stop_date, 0]);\n
dummy_update python: item_dict.update({item_uid: [item_title, \n
min(item_dict[item_uid][1], start_date), \n
max(item_dict[item_uid][2], stop_date), \n
sum([item_dict[item_uid][3], quantity])]});"
>
\n
</tal:block>
\n
</tal:block>
\n
<table>
\n
<thead>
\n
<tr>
\n
<th><span>
Instance
</span></th>
\n
<th><span>
From
</span></th>
\n
<th><span>
To
</span></th>
\n
<th><span>
Quantity
</span></th>
\n
</tr>
\n
</thead>
\n
<tbody>
\n
<tr
tal:repeat=
"item_tuple python: item_dict.values()"
>
\n
<td
tal:content=
"python: item_tuple[0]"
></td>
\n
<td
tal:content=
"python: item_tuple[1].strftime(\'%B %e, %G\')"
></td>
\n
<td
tal:content=
"python: item_tuple[2].strftime(\'%B %e, %G\')"
></td>
\n
<td
tal:content=
"python: quantity_renderer(item_tuple[3])"
></td>
\n
</tr>
\n
</tbody>
\n
</table>
\n
</aside>
\n
</tal:block>
\n
\n
<footer>
Generated with ERP5 - Open Source ERP suite (www.erp5.org)
</footer>
\n
</body>
\n
</html>
]]>
</unicode>
</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>
master/bt5/slapos_web/bt/revision
View file @
bdc5ffc3
29
\ No newline at end of file
30
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment