package KashFlowAPI;
# THIS HAS BEEN HEAVILY HACKED. DO NOT REGENERATE

# Generated by SOAP::Lite (v0.710.10) for Perl -- soaplite.com
# Copyright (C) 2000-2006 Paul Kulchenko, Byrne Reese
# -- generated at [Thu Dec 31 10:51:16 2009]
# -- generated from https://securedwebapp.com/api/service.asmx?wsdl
my %methods = (
GetDigitaCSVFile => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetDigitaCSVFile',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetDigitaCSVFile
EmailInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/EmailInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'FromEmail', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'FromName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SubjectLine', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Body', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'RecipientEmail', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end EmailInvoice
GetNominalLedger => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetNominalLedger',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'NominalID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetNominalLedger
GetJournals => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetJournals',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetJournals
GetBankTxTypes => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetBankTxTypes',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetBankTxTypes
SetCustomerVATNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/SetCustomerVATNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustVATNumber', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end SetCustomerVATNumber
GetQuotes => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetQuotes',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetQuotes
GetPaypalLink => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetPaypalLink',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetPaypalLink
GetVATReport => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetVATReport',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetVATReport
InsertReceipt => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertReceipt',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Inv', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end InsertReceipt
UpdateReceipt => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateReceipt',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Receipt', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end UpdateReceipt
DeleteQuote => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteQuote',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteQuote
DeleteInvoiceByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteInvoiceByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteInvoiceByID
DeleteInvoiceLine => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteInvoiceLine',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'LineID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteInvoiceLine
SageFileImport => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/SageFileImport',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'iSetID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end SageFileImport
UpdateInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Inv', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end UpdateInvoice
InsertJournal => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertJournal',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Jnl', type => 'tns:JournalEntry', attr => {}),
    ], # end parameters
  }, # end InsertJournal
InsertInvoicePayment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertInvoicePayment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoicePayment', type => 'tns:Payment', attr => {}),
    ], # end parameters
  }, # end InsertInvoicePayment
GetInvoicesForCustomer => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetInvoicesForCustomer',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetInvoicesForCustomer
GetTrialBalance => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetTrialBalance',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetTrialBalance
GetReceiptPayment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetReceiptPayment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetReceiptPayment
DeleteQuoteByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteQuoteByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteQuoteByID
GetReceipt => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetReceipt',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetReceipt
GetCustomerByEmail => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomerByEmail',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerEmail', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCustomerByEmail
DeleteInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteInvoice
SetSupplierVATNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/SetSupplierVATNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupVATNumber', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end SetSupplierVATNumber
GetNominalCodesExtended => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetNominalCodesExtended',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetNominalCodesExtended
DeleteSupplier => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteSupplier',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteSupplier
InsertInvoiceLineWithInvoiceNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertInvoiceLineWithInvoiceNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvLine', type => 'tns:InvoiceLine', attr => {}),
    ], # end parameters
  }, # end InsertInvoiceLineWithInvoiceNumber
AutoAuthIP => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/AutoAuthIP',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'appName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'AutoAuthKey', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end AutoAuthIP
GetQuoteByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetQuoteByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetQuoteByID
DeleteQuoteLine => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteQuoteLine',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'LineID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'QuoteNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteQuoteLine
InsertSupplier => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertSupplier',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'supl', type => 'tns:Supplier', attr => {}),
    ], # end parameters
  }, # end InsertSupplier
GetProfitAndLoss => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetProfitAndLoss',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetProfitAndLoss
SageFile => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/SageFile',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'buffer', type => 'xsd:base64Binary', attr => {}),
      SOAP::Data->new(name => 'reference', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end SageFile
DeleteJournal => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteJournal',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'JournalNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteJournal
GetSuppliers => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetSuppliers',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetSuppliers
InsertNominalCode => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertNominalCode',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'name', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'code', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'classification', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'nomtype', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end InsertNominalCode
GetBankBalance => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetBankBalance',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'AccountID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'BalanceDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetBankBalance
GetBankOverview => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetBankOverview',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetBankOverview
GetSupplierByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetSupplierByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetSupplierByID
GetReceiptsForSupplier => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetReceiptsForSupplier',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetReceiptsForSupplier
DeleteInvoicePayment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteInvoicePayment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoicePaymentNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteInvoicePayment
GetInvoicePayment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetInvoicePayment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetInvoicePayment
GetReceiptAttachments => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetReceiptAttachments',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetReceiptAttachments
GetBankAccounts => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetBankAccounts',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetBankAccounts
GetQuotesForCustomer => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetQuotesForCustomer',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetQuotesForCustomer
DeleteBankTransaction => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteBankTransaction',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'TransactionID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteBankTransaction
GetInvoiceByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetInvoiceByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetInvoiceByID
DeleteReceiptLine => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteReceiptLine',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'LineID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'ReceiptNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteReceiptLine
InsertQuote => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertQuote',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Quote', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end InsertQuote
GetProjects => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetProjects',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetProjects
GetCustomerCurrency => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomerCurrency',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCustomerCurrency
GetNominalCodes => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetNominalCodes',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetNominalCodes
UpdateJournal => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateJournal',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Jnl', type => 'tns:JournalEntry', attr => {}),
    ], # end parameters
  }, # end UpdateJournal
PrintInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/PrintInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumberList', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end PrintInvoice
GetMonthlyProfitAndLoss => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetMonthlyProfitAndLoss',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetMonthlyProfitAndLoss
GetJournal => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetJournal',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'JournalNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetJournal
GetRecPayMethods => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetRecPayMethods',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetRecPayMethods
GetCustomerSources => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomerSources',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCustomerSources
GetCustomerVATNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomerVATNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCustomerVATNumber
InsertReceiptLine => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertReceiptLine',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvLine', type => 'tns:InvoiceLine', attr => {}),
    ], # end parameters
  }, # end InsertReceiptLine
DeleteReceiptAttachment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteReceiptAttachment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'AttachmentID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteReceiptAttachment
DeleteCustomer => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteCustomer',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteCustomer
GetCustomerByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomerByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetCustomerByID
GetRemoteLoginURL => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetRemoteLoginURL',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetRemoteLoginURL
GetInvPayMethods => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetInvPayMethods',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetInvPayMethods
SetSupplierCurrency => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/SetSupplierCurrency',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CurrencyCode', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end SetSupplierCurrency
GetSupplierCurrency => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetSupplierCurrency',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetSupplierCurrency
DeleteReceipt => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteReceipt',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteReceipt
SetCustomerCurrency => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/SetCustomerCurrency',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CurrencyCode', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end SetCustomerCurrency
DeleteInvoiceLineWithInvoiceID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteInvoiceLineWithInvoiceID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'LineID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvoiceID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteInvoiceLineWithInvoiceID
InsertReceiptLineFromNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertReceiptLineFromNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptNumber', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvLine', type => 'tns:InvoiceLine', attr => {}),
    ], # end parameters
  }, # end InsertReceiptLineFromNumber
UpdateInvoiceHeader => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateInvoiceHeader',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Inv', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end UpdateInvoiceHeader
ConvertQuoteToInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/ConvertQuoteToInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'CustomerID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'CopyQuoteReference', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'deleteQuoteAfterConversion', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end ConvertQuoteToInvoice
createAccount => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/createAccount',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'AccountCreationKey', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Username', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'memorableword', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'EmailAddress', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CompanyName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Addr1', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Addr2', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Addr3', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Addr4', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Postcode', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ContactName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Telephone', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'VATRegistered', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'VATNumber', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'USSettings', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'promocode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end createAccount
UpdateQuoteHeader => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateQuoteHeader',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Quote', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end UpdateQuoteHeader
AttachFileToReceipt => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/AttachFileToReceipt',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptNo', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'Base64String', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ContentType', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Filename', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'FileExtension', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'FileSize', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end AttachFileToReceipt
UpdateJournalHeader => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateJournalHeader',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Jnl', type => 'tns:JournalEntry', attr => {}),
    ], # end parameters
  }, # end UpdateJournalHeader
isStillQuote => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/isStillQuote',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end isStillQuote
UpdateSupplier => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateSupplier',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'sup', type => 'tns:Supplier', attr => {}),
    ], # end parameters
  }, # end UpdateSupplier
DeleteReceiptByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteReceiptByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteReceiptByID
InsertQuoteLine => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertQuoteLine',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'QuoteLine', type => 'tns:InvoiceLine', attr => {}),
    ], # end parameters
  }, # end InsertQuoteLine
GetQuoteByNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetQuoteByNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'QuoteNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetQuoteByNumber
DeleteReceiptLineWithReceiptID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteReceiptLineWithReceiptID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'LineID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'ReceiptID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteReceiptLineWithReceiptID
DeleteJournalByID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteJournalByID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'JournalID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteJournalByID
InsertInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Inv', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end InsertInvoice
GetInvoice => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetInvoice',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetInvoice
GetCustomers => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomers',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCustomers
GetCustomersModifiedSince => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomersModifiedSince',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ModifiedSince', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetCustomersModifiedSince
UpdateReceiptHeader => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateReceiptHeader',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Receipt', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end UpdateReceiptHeader
DeleteQuoteLineWithQuoteID => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteQuoteLineWithQuoteID',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'LineID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'QuoteID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteQuoteLineWithQuoteID
InsertInvoiceLine => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertInvoiceLine',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'InvoiceID', type => 'xsd:int', attr => {}),
      SOAP::Data->new(name => 'InvLine', type => 'tns:InvoiceLine', attr => {}),
    ], # end parameters
  }, # end InsertInvoiceLine
InsertReceiptPayment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertReceiptPayment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptPayment', type => 'tns:Payment', attr => {}),
    ], # end parameters
  }, # end InsertReceiptPayment
UpdateQuote => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateQuote',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Quote', type => 'tns:Invoice', attr => {}),
    ], # end parameters
  }, # end UpdateQuote
DeleteReceiptPayment => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/DeleteReceiptPayment',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'ReceiptPaymentNumber', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end DeleteReceiptPayment
GetSupplier => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetSupplier',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetSupplier
GetSupplierVATNumber => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetSupplierVATNumber',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'SupplierCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetSupplierVATNumber
GetCustomer => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCustomer',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'CustomerCode', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCustomer
GetAccountOverview => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetAccountOverview',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetAccountOverview
GetBankTransactions => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetBankTransactions',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'AccountID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end GetBankTransactions
isUserVATRegistered => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/isUserVATRegistered',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end isUserVATRegistered
UpdateBankTransaction => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateBankTransaction',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'bp', type => 'tns:BankTransaction', attr => {}),
      SOAP::Data->new(name => 'TransactionID', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end UpdateBankTransaction
GetInvoicesByDateRange => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetInvoicesByDateRange',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'StartDate', type => 'xsd:dateTime', attr => {}),
      SOAP::Data->new(name => 'EndDate', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetInvoicesByDateRange
GetBalanceSheet => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetBalanceSheet',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Date', type => 'xsd:dateTime', attr => {}),
    ], # end parameters
  }, # end GetBalanceSheet
CreateBankAccount => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/CreateBankAccount',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'AccountName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'NominalCode', type => 'xsd:int', attr => {}),
    ], # end parameters
  }, # end CreateBankAccount
InsertBankTransaction => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertBankTransaction',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'bp', type => 'tns:BankTransaction', attr => {}),
    ], # end parameters
  }, # end InsertBankTransaction
InsertCustomer => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/InsertCustomer',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'custr')#, type => 'tns:Customer', attr => {}),
    ], # end parameters
  }, # end InsertCustomer
GetReceipts => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetReceipts',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetReceipts
GetProducts => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetProducts',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetProducts
GetCurrencies => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/GetCurrencies',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
    ], # end parameters
  }, # end GetCurrencies
UpdateCustomer => {
    endpoint => 'https://securedwebapp.com/api/service.asmx',
    soapaction => 'KashFlow/UpdateCustomer',
    namespace => 'KashFlow',
    parameters => [
      SOAP::Data->new(name => 'UserName', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'Password', type => 'xsd:string', attr => {}),
      SOAP::Data->new(name => 'custr', type => 'tns:Customer', attr => {}),
    ], # end parameters
  }, # end UpdateCustomer
); # end my %methods

use SOAP::Lite;
use Exporter;
use Carp ();

use vars qw(@ISA $AUTOLOAD @EXPORT_OK %EXPORT_TAGS);
@ISA = qw(Exporter SOAP::Lite);
@EXPORT_OK = (keys %methods);
%EXPORT_TAGS = ('all' => [@EXPORT_OK]);

sub _call {
    my ($self, $method) = (shift, shift);
    my $name = UNIVERSAL::isa($method => 'SOAP::Data') ? $method->name : $method;
    my %method = %{$methods{$name}};
    $self->proxy($method{endpoint} || Carp::croak "No server address (proxy) specified")
        unless $self->proxy;
    my @templates = @{$method{parameters}};
    my @parameters = ();
    foreach my $param (@_) {
        if (@templates) {
            my $template = shift @templates;
            my ($prefix,$typename) = SOAP::Utils::splitqname($template->type);
            my $method = 'as_'.$typename;
            # TODO - if can('as_'.$typename) {...}
            #my $result = $self->serializer->$method($param, $template->name, $template->type, $template->attr);
            #push(@parameters, $template->value($result->[2]));
            push @parameters, $template->value($param);
            # XXX Don't use serialiser
        }
        else {
            push(@parameters, $param);
        }
    }
    #$self->endpoint($method{endpoint})
       #->ns($method{namespace})
    #   ->on_action(sub{qq!"$method{soapaction}"!});
    $self->uri('KashFlow')
                ->proxy('https://securedwebapp.com/api/service.asmx');
       $self->soapversion("1.1"); # XXX
       $self->on_action(sub { sprintf '%s/%s', @_ });

=for later

  $self->serializer->register_ns("http://microsoft.com/wsdl/mime/textMatching/","tm");
  $self->serializer->register_ns("http://schemas.xmlsoap.org/wsdl/soap12/","soap12");
  $self->serializer->register_ns("http://schemas.xmlsoap.org/wsdl/mime/","mime");
  $self->serializer->register_ns("http://www.w3.org/2001/XMLSchema","s");
  $self->serializer->register_ns("http://schemas.xmlsoap.org/wsdl/soap/","soap");
  $self->serializer->register_ns("http://schemas.xmlsoap.org/wsdl/","wsdl");
  $self->serializer->register_ns("http://schemas.xmlsoap.org/soap/encoding/","soapenc");
  $self->serializer->register_ns("http://schemas.xmlsoap.org/wsdl/http/","http");

=cut

  $self->serializer->register_ns("KashFlow","tns");
  $self->serializer->register_ns("KashFlow/AbstractTypes","s1");

    my $som = $self->SUPER::call($method => @parameters);
    if ($self->want_som) {
        return $som;
    }
    UNIVERSAL::isa($som => 'SOAP::SOM') ? wantarray ? $som->paramsall : $som->result : $som;
}

sub BEGIN {
    no strict 'refs';
    for my $method (qw(want_som)) {
        my $field = '_' . $method;
        *$method = sub {
            my $self = shift->new;
            @_ ? ($self->{$field} = shift, return $self) : return $self->{$field};
        }
    }
}
no strict 'refs';
for my $method (@EXPORT_OK) {
    my %method = %{$methods{$method}};
    *$method = sub {
        my $self = UNIVERSAL::isa($_[0] => __PACKAGE__)
            ? ref $_[0]
                ? shift # OBJECT
                # CLASS, either get self or create new and assign to self
                : (shift->self || __PACKAGE__->self(__PACKAGE__->new))
            # function call, either get self or create new and assign to self
            : (__PACKAGE__->self || __PACKAGE__->self(__PACKAGE__->new));
        $self->_call($method, @_);
    }
}

sub AUTOLOAD {
    my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::') + 2);
    return if $method eq 'DESTROY' || $method eq 'want_som';
    die "Unrecognized method '$method'. List of available method(s): @EXPORT_OK\n";
}

sub SOAP::Serializer::as_InvoiceLineSet {
   my $self = shift;
   my($value, $name, $type, $attr) = @_;
   return [ "Lines", {}, 
     [ map {$self->encode_object($_)}  @{$value->{anyType}}  ]
     ];
}


sub SOAP::Serializer::as_InvoiceLine {
   my $self = shift;
   my($value, $name, $type, $attr) = @_;
   return ["anyType", {'xsi:type' => 'InvoiceLine', %$attr}, 
   [map {$self->encode_object($value->{$_}, $_)} keys %$value]
    ]
}

1;
