package KashFlowAPI;

use strict;
use warnings;

# 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
    GetVATRates => {
        endpoint   => 'https://securedwebapp.com/api/service.asmx',
        soapaction => 'KashFlow/GetVATRates',
        namespace  => 'KashFlow',
        parameters => [
            SOAP::Data->new(
                name => 'UserName',
                type => 'xsd:string',
                attr => {}
            ),
            SOAP::Data->new(
                name => 'Password',
                type => 'xsd:string',
                attr => {}
            ),
        ],    # end parameters
    },    # end  GetVATRates
    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
    GetInvoices_Unpaid => {
        endpoint   => 'https://securedwebapp.com/api/service.asmx',
        soapaction => 'KashFlow/GetInvoices_Unpaid',
        namespace  => 'KashFlow',
        parameters => [
            SOAP::Data->new(
                name => 'UserName',
                type => 'xsd:string',
                attr => {}
            ),
            SOAP::Data->new(
                name => 'Password',
                type => 'xsd:string',
                attr => {}
            ),
        ],    # end parameters
    },    # end GetInvoices_Unpaid
    GetInvoices_Overdue => {
        endpoint   => 'https://securedwebapp.com/api/service.asmx',
        soapaction => 'KashFlow/GetInvoices_Overdue',
        namespace  => 'KashFlow',
        parameters => [
            SOAP::Data->new(
                name => 'UserName',
                type => 'xsd:string',
                attr => {}
            ),
            SOAP::Data->new(
                name => 'Password',
                type => 'xsd:string',
                attr => {}
            ),
        ],    # end parameters
    },    # end GetInvoices_Overdue
    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 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', @_ } );


    $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 ) = @_;
    if ( ref $value->{anyType} ne 'ARRAY' ) {
        return [ "Lines", {}, [ $self->encode_object( $value->{anyType} ) ] ];

    }
    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;

__END__

=pod

=encoding UTF-8

=head1 NAME

KashFlowAPI

=head1 VERSION

version 0.04

=begin later




=end 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");

=head1 AUTHORS

=over 4

=item *

'Simon Cozens <simon at simon-cozens.org>'

=item *

'Jason Clifford <jason@ukfsn.org>'

=item *

'Gavin Henry <ghenry@surevoip.co.uk>'

=back

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Gavin Henry, Simon Cozens, Jason Clifford.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
