Skip to content

Commit 24e32a3

Browse files
committed
Better Samples
1 parent eb7a777 commit 24e32a3

File tree

3 files changed

+219
-85
lines changed

3 files changed

+219
-85
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,4 @@ docs/_build/
5454

5555
# Mohanjith
5656
tmp/
57-
moha.py
57+
moha*.py

samples/senderinfo.py

Lines changed: 217 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,117 @@
11
#!/usr/bin/env python
22
# -*- coding: iso8859-15 -*-
33

4+
5+
## Start of parameters ##
6+
7+
_sellerOrganisationName = {
8+
'FI': 'Pullis Musiken Oy',
9+
'SV': 'Pullis Musiken Ab',
10+
'EN': 'Pullis Musiken Ltd',
11+
}
12+
_sellerAddress = 'Puukatu 2 F'
13+
_sellerTown = 'HELSINKI'
14+
_sellerPostCode = '00112'
15+
_sellerCountryCode = 'FI'
16+
_sellerCountryName = 'Suomi'
17+
_sellerAccounts = [
18+
{ 'IBAN': 'FI2757800750155448', 'BIC': 'OKOYFIHH' },
19+
{ 'IBAN': 'FI2721221222212227', 'BIC': 'NDEAFIHH' },
20+
{ 'IBAN': 'FI2781232323312334', 'BIC': 'PSPBFIHH' },
21+
]
22+
23+
_sellerWebAddressNameText = _sellerOrganisationName['FI']
24+
_sellerWebAddress = 'https://www.pullinmusiikki.fi/'
25+
_sellerInvoiceAddress = '00371999207'
26+
_sellerInvoiceIntermediatorAddress = 'OKOYFIHH'
27+
_sellerYTunnus = '0199920-7'
28+
_sellerIndustryCode = '62020'
29+
30+
_sellerInvoiceTypeDetails = {
31+
'FI': {
32+
'text': 'Kirjanpito palvelu',
33+
'validation':
34+
[
35+
{
36+
'type': '02',
37+
'min': None,
38+
'hyphens': None,
39+
'spaces': None,
40+
'max': None,
41+
'text': 'Viitenumero'
42+
},
43+
{
44+
'type': '09',
45+
'min': 10,
46+
'hyphens': True,
47+
'spaces': None,
48+
'max': 10,
49+
'text': 'Asiakasnumero'
50+
},
51+
],
52+
},
53+
'SV': {
54+
'text': 'Bokföring tjänster',
55+
'validation':
56+
[
57+
{
58+
'type': '02',
59+
'min': None,
60+
'hyphens': None,
61+
'spaces': None,
62+
'max': None,
63+
'text': 'Referensnummer'
64+
},
65+
{
66+
'type': '09',
67+
'min': 10,
68+
'hyphens': True,
69+
'spaces': None,
70+
'max': 10,
71+
'text': 'Kundnummer'
72+
},
73+
],
74+
},
75+
'EN': {
76+
'text': 'Bookkeeping service',
77+
'validation':
78+
[
79+
{
80+
'type': '02',
81+
'min': None,
82+
'hyphens': None,
83+
'spaces': None,
84+
'max': None,
85+
'text': 'Reference number'
86+
},
87+
{
88+
'type': '09',
89+
'min': 10,
90+
'hyphens': True,
91+
'spaces': None,
92+
'max': 10,
93+
'text': 'Customer number'
94+
},
95+
],
96+
},
97+
}
98+
99+
_paymentInstructionId = 'Bookkeeping service'
100+
101+
_proposedDueDate = 'NO'
102+
_proposedPaymentPeriod = 'YES'
103+
104+
_messageId = '001'
105+
_messageActionCode = 'ADD'
106+
107+
## End of parameters ##
108+
4109
import sys
5110
import datetime, time
6111

7-
reload(sys)
112+
reload( sys )
8113

9-
sys.setdefaultencoding("iso8859-15")
114+
sys.setdefaultencoding( 'iso8859-15' )
10115
sys.path.append( './' )
11116

12117
from finvoice.sender.senderinfo import ExternalEncoding
@@ -36,132 +141,161 @@
36141

37142
# Seller Postal Address
38143
# SellerStreetName=None, SellerTownName=None, SellerPostCodeIdentifier=None, CountryCode=None, CountryName=None, SellerPostOfficeBoxIdentifier=None
39-
sellerPostalAddress = SellerPostalAddressDetailsType( "Puukatu 2 F", "HELSINKI", 00112, "FI", "Suomi" )
144+
sellerPostalAddress = SellerPostalAddressDetailsType( _sellerAddress, _sellerTown, _sellerPostCode, _sellerCountryCode, _sellerCountryName )
40145

146+
sellerOrganisationNames = {}
41147
# Seller Organization Name
42148
# LanguageCode=None, SellerOrganisationName=None
43-
sellerOrganisationNamesFi = SellerOrganisationNamesType( "FI" )
44-
sellerOrganisationNamesFi.add_SellerOrganisationName( "Pullis Musiken Oy" )
45-
sellerOrganisationNamesSv = SellerOrganisationNamesType( "SV" )
46-
sellerOrganisationNamesSv.add_SellerOrganisationName( "Pullis Musiken Ab" )
47-
sellerOrganisationNamesEn = SellerOrganisationNamesType( "EN" )
48-
sellerOrganisationNamesEn.add_SellerOrganisationName( "Pullis Musiken Ltd" )
149+
for (_langCode, _orgName) in _sellerOrganisationName.items():
150+
sellerOrganisationNames[_langCode] = SellerOrganisationNamesType( _langCode )
151+
sellerOrganisationNames[_langCode].add_SellerOrganisationName( _orgName )
49152

153+
sellerAccountDetails = []
50154
# SellerAccountID=None, SellerBic=None, NewSellerAccountID=None, NewSellerBic=None
51-
sellerAccountDetailsOKOYFIHH = SellerAccountDetailsType( SellerAccountIDType( "IBAN", "FI2757800750155448" ), SellerBicType( "BIC", "OKOYFIHH" ) )
52-
sellerAccountDetailsNDEAFIHH = SellerAccountDetailsType( SellerAccountIDType( "IBAN", "FI2721221222212227" ), SellerBicType( "BIC", "NDEAFIHH" ) )
53-
sellerAccountDetailsNDEAFIHH = SellerAccountDetailsType( SellerAccountIDType( "IBAN", "FI2781232323312334" ), SellerBicType( "BIC", "PSPBFIHH" ) )
155+
for _account in _sellerAccounts:
156+
sellerAccountDetails.append( SellerAccountDetailsType( SellerAccountIDType( 'IBAN', _account['IBAN'] ), SellerBicType( 'BIC', _account['BIC'] ) ) )
54157

55158
# Sender Information
56159
# Version=None, MessageDetails=None, SellerPartyDetails=None, SellerOrganisationUnitNumber=None, InvoiceSenderInformationDetails=None,
57160
# SellerAccountDetails=None, SellerInvoiceDetails=None, ProposedDueDateAccepted=None, ProposedInvoicePeriodAccepted=None
58-
senderInfo = FinvoiceSenderInfo( "2.0" )
59-
60-
_messageId = "001"
161+
senderInfo = FinvoiceSenderInfo( '2.0' )
61162

62163
# Message Details
63164
# MessageTypeCode=None, MessageTypeText=None, MessageActionCode=None, MessageActionCodeIdentifier=None, MessageDate=None, SenderInfoIdentifier=None
64-
senderInfo.set_MessageDetails( MessageDetailsType( "SENDERINFO", "Sender information", "ADD", "00", nowDate, _messageId ) )
165+
senderInfo.set_MessageDetails( MessageDetailsType( 'SENDERINFO', 'INVOICER NOTIFICATION', _messageActionCode, None, nowDate, _messageId ) )
65166

66167
# Seller Party Details
67168
# SellerPartyIdentifier=None, SellerOrganisationNames=None, SellerOrganisationBankName=None, SellerPostalAddressDetails=None, IndustryCode=None
68-
sellerPartyDetails = SellerPartyDetailsType( "0199920-7", None, None, sellerPostalAddress, 62020 )
69-
sellerPartyDetails.add_SellerOrganisationNames( sellerOrganisationNamesFi )
70-
sellerPartyDetails.add_SellerOrganisationNames( sellerOrganisationNamesSv )
71-
sellerPartyDetails.add_SellerOrganisationNames( sellerOrganisationNamesEn )
169+
sellerPartyDetails = SellerPartyDetailsType( _sellerYTunnus, None, None, sellerPostalAddress, _sellerIndustryCode )
170+
171+
for (_langCode, _orgName) in sellerOrganisationNames.items():
172+
sellerPartyDetails.add_SellerOrganisationNames( _orgName )
72173

73174
senderInfo.set_SellerPartyDetails( sellerPartyDetails )
74175

75176
# SellerWebaddressNameText=None, SellerWebaddressText=None, InvoiceSenderAddress=None, InvoiceSenderIntermediatorAddress=None, NewInvoiceSenderAddress=None, NewInvoiceSenderIntermediatorAddress=None
76-
senderInfo.set_InvoiceSenderInformationDetails( InvoiceSenderInformationDetailsType( "Pullin Musiikki Oy", "https://www.pullinmusiikki.fi/", "00371999207", "OKOYFIHH" ) )
177+
senderInfo.set_InvoiceSenderInformationDetails( InvoiceSenderInformationDetailsType( _sellerWebAddressNameText, _sellerWebAddress, _sellerInvoiceAddress, _sellerInvoiceIntermediatorAddress ) )
77178

78-
senderInfo.add_SellerAccountDetails( sellerAccountDetailsOKOYFIHH )
79-
senderInfo.add_SellerAccountDetails( sellerAccountDetailsNDEAFIHH )
179+
for _account in sellerAccountDetails:
180+
senderInfo.add_SellerAccountDetails( _account )
80181

81-
# SellerInvoiceTypeText=None, SellerInvoiceIdentifierText=None
82-
sellerInvoiceTypeDetailsFi = SellerInvoiceTypeDetailsType( SellerInvoiceTypeTextType( "FI", "Kirjanpito palvelu" ) )
83-
sellerInvoiceTypeDetailsSv = SellerInvoiceTypeDetailsType( SellerInvoiceTypeTextType( "SV", "Bokföring tjänster" ) )
84-
sellerInvoiceTypeDetailsEn = SellerInvoiceTypeDetailsType( SellerInvoiceTypeTextType( "EN", "Bookkeeping service" ) )
182+
# SellerDirectDebitIdentifier=None, PaymentInstructionIdentifier=None, SellerInstructionFreeText=None, SellerInvoiceTypeDetails=None, SellerServiceCode=None
183+
sellerInvoiceDetails = SellerInvoiceDetailsType( None, _paymentInstructionId )
85184

86-
#LanguageCode=None, SellerInvoiceIdentifierType=None, SellerInvoiceIdentifierMinLength=1, SellerInvoiceIdentifierHyphens=False, SellerInvoiceIdentifierSpaces=False, SellerInvoiceIdentifierMaxLength=35, valueOf_=None, extensiontype_=None
87-
sellerInvoiceTypeDetailsFi.add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( "FI", "02", None, None, None, None, "Viitenumero" ) )
88-
sellerInvoiceTypeDetailsFi.add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( "FI", "09", 10, True, False, 10, "Asiakasnumero" ) )
185+
sellerInvoiceTypeDetails = {}
186+
for (_langCode, _type) in _sellerInvoiceTypeDetails.items():
187+
# SellerInvoiceTypeText=None, SellerInvoiceIdentifierText=None
188+
sellerInvoiceTypeDetails[_langCode] = SellerInvoiceTypeDetailsType( SellerInvoiceTypeTextType( _langCode, _type['text'] ) )
89189

90-
sellerInvoiceTypeDetailsSv.add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( "SV", "02", None, None, None, None, "Referensnummer" ) )
91-
sellerInvoiceTypeDetailsSv.add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( "SV", "04", 10, True, False, 10, "Kundnummer" ) )
190+
for _validation in _type['validation']:
191+
#LanguageCode=None, SellerInvoiceIdentifierType=None, SellerInvoiceIdentifierMinLength=1, SellerInvoiceIdentifierHyphens=False, SellerInvoiceIdentifierSpaces=False, SellerInvoiceIdentifierMaxLength=35, valueOf_=None, extensiontype_=None
192+
sellerInvoiceTypeDetails[_langCode].add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( _langCode, _validation['type'], _validation['min'], _validation['hyphens'], _validation['spaces'], _validation['max'], _validation['text'] ) )
92193

93-
sellerInvoiceTypeDetailsEn.add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( "EN", "02", None, None, None, None, "Reference number" ) )
94-
sellerInvoiceTypeDetailsEn.add_SellerInvoiceIdentifierText( SellerInvoiceIdentifierTextType( "EN", "04", 10, True, False, 10, "Customer number" ) )
194+
sellerInvoiceDetails.add_SellerInvoiceTypeDetails( sellerInvoiceTypeDetails[_langCode] )
95195

96-
# SellerDirectDebitIdentifier=None, PaymentInstructionIdentifier=None, SellerInstructionFreeText=None, SellerInvoiceTypeDetails=None, SellerServiceCode=None
97-
sellerInvoiceDetails = SellerInvoiceDetailsType( None, "Bookkeeping service" )
98-
sellerInvoiceDetails.add_SellerInvoiceTypeDetails( sellerInvoiceTypeDetailsFi )
99-
sellerInvoiceDetails.add_SellerInvoiceTypeDetails( sellerInvoiceTypeDetailsSv )
100-
sellerInvoiceDetails.add_SellerInvoiceTypeDetails( sellerInvoiceTypeDetailsEn )
101-
102-
sellerInvoiceDetails.set_SellerServiceCode( "00" )
196+
# = e-invoicer
197+
sellerInvoiceDetails.set_SellerServiceCode( '00' )
103198

104199
senderInfo.set_SellerInvoiceDetails( sellerInvoiceDetails )
105200

106-
senderInfo.set_ProposedDueDateAccepted( "NO" )
107-
senderInfo.set_ProposedInvoicePeriodAccepted( "YES" )
201+
senderInfo.set_ProposedDueDateAccepted( _proposedDueDate )
202+
senderInfo.set_ProposedInvoicePeriodAccepted( _proposedPaymentPeriod )
203+
204+
_recepients = [
205+
{
206+
'Receiver': 'SENDERINFO',
207+
'Intermediator': 'OKOYFIHH',
208+
},
209+
{
210+
'Receiver': 'SENDERINFO',
211+
'Intermediator': 'NDEAFIHH',
212+
},
213+
{
214+
'Receiver': 'SENDERINFO',
215+
'Intermediator': 'DABAFIHH',
216+
},
217+
{
218+
'Receiver': 'SENDERINFO',
219+
'Intermediator': 'HELSFIHH',
220+
},
221+
{
222+
'Receiver': 'SENDERINFO',
223+
'Intermediator': 'TAPIFI22',
224+
},
225+
{
226+
'Receiver': 'SENDERINFO',
227+
'Intermediator': 'AABAFI22',
228+
},
229+
{
230+
'Receiver': 'SENDERINFO',
231+
'Intermediator': 'HANDFIHH',
232+
},
233+
{
234+
'Receiver': 'SENDERINFO',
235+
'Intermediator': 'SBANFIHH',
236+
},
237+
{
238+
'Receiver': 'SENDERINFO',
239+
'Intermediator': 'DNBAFIHX',
240+
}
241+
]
108242

109-
# Header=None, Body=None
110-
envelope = Envelope( )
243+
_now = datetime.datetime.now( reference.LocalTimezone() )
244+
_nowS = datetime.datetime( _now.year, _now.month, _now.day, _now.hour, _now.minute, _now.second, 0, _now.tzinfo )
111245

112-
# mustUnderstand=None, version=None, From=None, To=None, CPAId=None, ConversationId=None, Service=None, Action=None, MessageData=None
113-
messageHeader = MessageHeader( 1, "2.0" )
246+
for (i, _recepient) in enumerate(_recepients):
247+
envelope = Envelope( )
114248

115-
header = Header( )
116-
header.add_anytypeobjs_( messageHeader )
249+
# mustUnderstand=None, version=None, From=None, To=None, CPAId=None, ConversationId=None, Service=None, Action=None, MessageData=None
250+
messageHeader = MessageHeader( 1, "2.0" )
117251

118-
# PartyId=None, Role=None
119-
msgFrom = From( None, "Sender" )
120-
msgFrom.add_PartyId( PartyId( None, "00371999207" ) )
252+
# Header=None, Body=None
253+
header = Header( )
254+
header.add_anytypeobjs_( messageHeader )
121255

122-
msgFromI = From( None, "Intermediator" )
123-
msgFromI.add_PartyId( PartyId( None, "OKOYFIHH" ) )
256+
# PartyId=None, Role=None
257+
msgFrom = From( None, "Sender" )
258+
msgFrom.add_PartyId( PartyId( None, _sellerInvoiceAddress ) )
124259

125-
messageHeader.add_anytypeobjs_( msgFrom )
126-
messageHeader.add_anytypeobjs_( msgFromI )
260+
msgFromI = From( None, "Intermediator" )
261+
msgFromI.add_PartyId( PartyId( None, _sellerInvoiceIntermediatorAddress ) )
127262

128-
msgTo = To( None, "Receiver" )
129-
msgTo.add_PartyId( PartyId( None, "SENDERINFO" ) )
263+
messageHeader.add_anytypeobjs_( msgFrom )
264+
messageHeader.add_anytypeobjs_( msgFromI )
130265

131-
msgToI = To( None, "Intermediator" )
132-
msgToI.add_PartyId( PartyId( None, "OKOYFIHH" ) )
266+
msgTo = To( None, "Receiver" )
267+
msgTo.add_PartyId( PartyId( None, _recepient['Receiver'] ) )
133268

134-
messageHeader.add_anytypeobjs_( msgTo )
135-
messageHeader.add_anytypeobjs_( msgToI )
269+
msgToI = To( None, "Intermediator" )
270+
msgToI.add_PartyId( PartyId( None, _recepient['Intermediator'] ) )
136271

137-
messageHeader.set_CPAId( "yoursandmycpa" )
272+
messageHeader.add_anytypeobjs_( msgTo )
273+
messageHeader.add_anytypeobjs_( msgToI )
138274

139-
messageHeader.set_Service( Service( None, "Routing" ) )
140-
messageHeader.set_Action( "ProcessInvoice" )
275+
messageHeader.set_CPAId( "yoursandmycpa" )
141276

142-
_now = datetime.datetime.now( reference.LocalTimezone() )
143-
_nowS = datetime.datetime( _now.year, _now.month, _now.day, _now.hour, _now.minute, _now.second, 0, _now.tzinfo )
144-
msgData = MessageData( _messageId + '/1', _nowS )
277+
messageHeader.set_Service( Service( None, "Routing" ) )
278+
messageHeader.set_Action( "ProcessInvoice" )
145279

146-
messageHeader.set_MessageData( msgData )
280+
msgData = MessageData( '{0}/{1}'.format(_messageId, i), _nowS )
147281

148-
# messageHeader.export( sys.stdout, 0, namespace_='eb:', name_='MessageHeader', namespacedef_='xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd msg-header-2_0.xsd"', pretty_print=True )
282+
messageHeader.set_MessageData( msgData )
149283

150-
envelope.set_Header( header )
284+
envelope.set_Header( header )
151285

152-
manifest = Manifest( "2.0", "Manifest" )
153-
reference = Reference( None, _messageId, None, "FinvoiceSenderInfo" )
154-
manifest.add_Reference( reference )
155-
reference.add_Schema( Schema( "2.0", "http://www.pankkiyhdistys.fi/verkkolasku/finvoice/FinvoiceSenderInfo.xsd" ) )
286+
manifest = Manifest( "2.0", "Manifest" )
287+
reference = Reference( None, _messageId, None, "FinvoiceSenderInfo" )
288+
manifest.add_Reference( reference )
289+
reference.add_Schema( Schema( "2.0", "http://www.pankkiyhdistys.fi/verkkolasku/finvoice/FinvoiceSenderInfo.xsd" ) )
156290

157-
body = Body( )
158-
body.add_anytypeobjs_( manifest )
291+
body = Body( )
292+
body.add_anytypeobjs_( manifest )
159293

160-
envelope.set_Body( body )
294+
envelope.set_Body( body )
161295

162-
envelope.export( sys.stdout, 0, pretty_print=True )
296+
envelope.export( sys.stdout, 0, pretty_print=True )
163297

164-
encodingHeader = '<?xml version="1.0" encoding="' + ExternalEncoding + '" ?>\n'
165-
sys.stdout.write( encodingHeader )
166-
sys.stdout.write( '<?xml-stylesheet type="text/xsl" href="FinvoiceSenderInfo.xsl"?>\n' )
167-
senderInfo.export( sys.stdout, 0, name_='FinvoiceSenderInfo', namespacedef_='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FinvoiceSenderInfo.xsd"', pretty_print=True )
298+
encodingHeader = '<?xml version="1.0" encoding="' + ExternalEncoding + '" ?>\n'
299+
sys.stdout.write( encodingHeader )
300+
sys.stdout.write( '<?xml-stylesheet type="text/xsl" href="FinvoiceSenderInfo.xsl"?>\n' )
301+
senderInfo.export( sys.stdout, 0, name_='FinvoiceSenderInfo', namespacedef_='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FinvoiceSenderInfo.xsd"', pretty_print=True )

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
author='Mohanjith Sudirikku Hannadige',
1010
author_email='moha@mohanjith.net',
1111
url='http://www.codemaster.fi/python/finvoice/',
12-
packages=[ 'finvoice', 'finvoice.ack', 'finvoice.attachment', 'finvoice.receiver', 'finvoice.sender' ]
12+
packages=[ 'finvoice', 'finvoice.ack', 'finvoice.attachment', 'finvoice.receiver', 'finvoice.sender', 'finvoice.soap' ]
1313
)

0 commit comments

Comments
 (0)