55
Odoo Accounting v9. Draft. Table of Content Introduction Goals & Planning Model Changes Cash vs Accrual Accounting Review Reconciliation Terminology change Full vs Partial matching Taxes Information on Journal Items Tax creation Tax Statement The generic tax summary Handling the tax declaration in localization modules Periods & Fiscal Years management Fiscal Year Closing Setting Initial Account Balances Sequences management Accounts Account Hierarchies Active accounts Account Types Journals Invoices Payment Orders Model of journal Items Notes for New API conversion account.py account_analytic_line.py account_bank.py account_bank_statement.py account_move_line.py module structure Change everywhere: Wizards Misc Bank and Cash Statements Expenses 1/55

Odoo Accounting

Embed Size (px)

Citation preview

  • Odoo Accounting v9. Draft. Table of Content

    Introduction

    Goals&PlanningModelChanges

    CashvsAccrualAccountingReviewReconciliation

    TerminologychangeFullvsPartialmatching

    TaxesInformationonJournalItemsTaxcreationTaxStatement

    ThegenerictaxsummaryHandlingthetaxdeclarationinlocalizationmodules

    Periods&FiscalYearsmanagementFiscalYearClosingSettingInitialAccountBalancesSequencesmanagementAccounts

    AccountHierarchiesActiveaccountsAccountTypes

    JournalsInvoicesPaymentOrdersModelofjournalItemsNotesforNewAPIconversion

    account.pyaccount_analytic_line.pyaccount_bank.pyaccount_bank_statement.pyaccount_move_line.pymodulestructureChangeeverywhere:WizardsMisc

    BankandCashStatementsExpenses

    1/55

  • ReportingEngineReportsMetadataFollowupsReview

    accountmodule:account_followupmodule:

    NewfeatureskanbanjournalasadashboardBankingflowReverseentrieswizardStornoandAngloSaxonModularityTests&DemoDataJournalEntriesRecordingSendInvoicesbyRegularMailAddManagementReportsDeposittickets

    ImprovementsofexistingfeaturesAccessrightsReconciliationBankStatementReconciliationBankStatementImportMenuitemsJournalformviewAccountformviewAssetsFiscalpositionformviewInvoiceReportRemoveAllEDIstuffBankAccountformview

    UsabilityUserOnBoardingFlowPlanner

    Phase2:localizationswitzerland:US:

    CcheckwrintingChartofaccounts(correctionofdefaultUStemplates)Cashdiscount

    2/55

  • 3/55

  • Introduction

    Goals & Planning OdooAccountingisasgoodasaccountingmodulesoftraditionalERPs.Butitdoesnothavethequalityofdedicatedaccountingsoftware.Ourreference,intermsofusability(notfeatures),isXero.comOdoov9musthaveabetterusabilitythanXero.OdooAccountingsUniqueSellingPropositionwillbe:

    Supersmoothintegrationwithbanks: Download/Importbankstatements SmartreconciliationwithInvoices Managepaymentseasily Uploadpayments/sendchecks

    Strongusability: superclear&easytouse,nocomplexconfigormenus fasttoperformdailyoperations.

    Thisprojectcoversfeatureslikeassetsandexpenses.Wewillworkinthreephases:

    Phase1:Genericimprovements:Oct2014Jan2015 Phase2:Localisationofkeycountries:Jan2015May2015 Phase3:Putinproductionandfinetune:March2015June2015 Phase4:Cleanextrafeatureslikebudget,analytic.

    4/55

  • extraquestionstoaddressinworkshops

    http://pad.odoo.com/p/accounting_roadmap_v9_extra_points donotpostautomaticallyjournalentriesattheinvoicevalidation? howcanweimprovepaymenttermswithdiscountsand/orextra tobetested:fiscalpositionontheSObasedonthedeliveryaddressinsteadof

    theinvoiceaddress outstandingreceivable:currenciesrevaluationattheendofFY/period

    5/55

    http://www.google.com/url?q=http%3A%2F%2Fpad.odoo.com%2Fp%2Faccounting_roadmap_v9_extra_points&sa=D&sntz=1&usg=AFQjCNEv0FU7bcP7TVnkl22hYG4UEWOOWA
  • Phase 1

    Model Changes

    Cash vs Accrual Accounting Currently,OdooAccountingisusingtheaccrualaccountingmethodbutinsomecountries(e.gUS),thenormismerelytodocashaccountingforsomebusinesses(usuallyservices).Moredetailsonthedifferencebetweenbothmethodin:http://www.irs.gov/publications/p538/ar02.html#en_US_201212_publink1000270633Everyreportcanhaveanoptiontogeneratethereportusingacashbasedmethodoranaccrualbasedone(ontheTaxSummaryreportforexample,thiswillallowustohaveaVATonpaymentreporting).Thisoptionwillbeselectedbydefaultusingthisinformationfromthecompany.Thereportsfiltersthejournalitemstouseaccordingtothemethod:

    Accrual:thecurrentmethod:weusealljournalitemsinthereports Cash:

    ifjournalentriesarenotlinkedtoareceivableorpayableaccount,theyareusedinthereport

    ifjournalentriesarelinkedtoeitherareceivableorapayableaccount:ifthesejournalitemsarenotreconciled,theyarenotusedinthereport

    Notethatpartialreconciliationhavealsoanimpactincashbasedreports(checkedinXero),notonlyfullreconciliationareshownincashbasedreports.Thatmeansthatifasaleof100with10ofvatismade,whenreceivingapaymentof11,werecognize10%ofthesaleand10%ofthevattoo.Becauseofthis,wegonnaneedadditionalstoredfieldtoknowthedebitandcredittouseincashbasedreports.TODO:

    addafieldonres.companytochoosebetweencashoraccrualmethod(fields.selection,widget=radio,default=accrual)

    addthefollowingfieldsonaccount.move.line: debit_cash_basis:float credit_cash_basis:float atthecreationofaccount.move.line,ifthejournalentryisundera

    sale/purchasejournal:thosefieldsaresetto0.Otherwisedebit_cash_basis=debitandcredit_cash_basis=credit

    6/55

    http://www.google.com/url?q=http%3A%2F%2Fwww.irs.gov%2Fpublications%2Fp538%2Far02.html%23en_US_201212_publink1000270633&sa=D&sntz=1&usg=AFQjCNExGk5ZGeKsfqMROSkmAzCxU336VA
  • atthereconciliation,onthereconcileditemsunderasale/purchasejournalupdatedebit_cash_basisandcredit_cash_basisfieldsattheprorataofthereconciledamountonthetotalsold/purchased

    inreportswherethisoptionhasameaning(P&L,BS,TaxSummary...),addtheoptioncashbasis.Ifitischecked,usethenewcolumnsinsteadoftheclassicdebitcreditones.

    Review Reconciliation

    Terminology change Thesystemwillbeentirelyreviewedinordertocleartheconfusionaboutthetermreconciliationwhich,inrealenglish,doesntrefertothebehaviorwehaveinOdoo.Weneedtodistinguish2usecasesthatcurrentlyusereconciliationasterminology(althougheveninfrenchthereexists2differentwordsforthat):

    1. Iwanttomakethelinkbetweenone/severalexistinginvoice(s)andone/severalexistingpayment(s).Hereweshouldspeakaboutmatchingthepaymentsandtheinvoices.Infrenchwecancontinuetalkingaboutrconcilierdesfacturesetpaiements.

    2. IwanttomakethelinkbetweenabankstatementIimportedandexistingjournalentriesthatarealreadypresentinmysystem.Hereweshouldspeakaboutthereconciliationofthebankstatement.Infrenchweshouldtalkaboutrapprocherdesextraitsbancaires.

    Becauseoftheunorderedwaywecreatedthedocument,youllstillfindinitreferencestobothusecasesusingreconciliationasasingleterminology.Pleasedontbeconfusedandreplacementallywithmatchingeverywherebankstatementsarentinvolved.

    Full vs Partial matching Current:

    Reconciliationconceptisok. Partialreconciliationisnotgood.Whenwepartiallyreconcile2paymentswith3

    invoices,itsimpossibletoknowthedueamountforeachinvoice.Weproposetosimplifypartialreconciliation.Insteadofusingthesameconceptasfullreconcile(linkseverallinestogether),apartialreconciliationisadirectlinkfromonejournalitemtoanother:youcanlinkthejournalitemofapaymenttooneandonlyonereceivablejournalitem(e.g.fromaninvoice).TODO:

    reconcile_partial_idfield: remove:fields.many2one('account.move.reconcile')

    7/55

  • add:fields.many2one('account.move.line') Reviewthedueamountcomputedfieldoninvoicesandexpensestoreducepartial

    payments: Unreconciledreceivables/payablejournalitemspartialpayments

    Showpaymentsdoneontheinvoiceandexpenses SimplifyPayInvoicewizard:

    nomoreselectionofdebit/creditlines(the2one2manyfields) shouldnotbeanaccount.voucheranymore,createadedicatedobjectfor

    payments. Removethecodethattriestomergeseveralpartialreconciliationintoabiggerone.

    Withthenewbankstatementthatallowstoreconcileonthefly,ausermayneverhavetodoareconciliation :1

    Whenimportingbankstatements,thebankreconciliationprocessdothereconciliation

    ofthepaymentwiththeinvoices Whencreatinginvoices,ifthereisanoutstandingpaymentforthiscustomer,the

    systemproposestoassignittotheinvoice.

    1https://www.odoo.com/forum/help1/question/howcanireconcilegeneralaccountsfrommybankstatement56566

    8/55

    https://www.google.com/url?q=https%3A%2F%2Fwww.odoo.com%2Fforum%2Fhelp-1%2Fquestion%2Fhow-can-i-reconcile-general-accounts-from-my-bank-statement-56566&sa=D&sntz=1&usg=AFQjCNFB-0RHcvdgmSY6rTtxxQCiD91BqQhttps://www.google.com/url?q=https%3A%2F%2Fwww.odoo.com%2Fforum%2Fhelp-1%2Fquestion%2Fhow-can-i-reconcile-general-accounts-from-my-bank-statement-56566&sa=D&sntz=1&usg=AFQjCNFB-0RHcvdgmSY6rTtxxQCiD91BqQ
  • TODO:Whenconfirminganinvoice,ifthecustomerhasanoutstandingcredit,thesystemproposestoautomaticallyassignittothisinvoiceasshownbythescreenshotbelow:

    Ofcourse,thereconciliationprocessstillexistsbutitshouldnotbeamandatoryoperationanymore.Userswillnothavetoworryanymoreaboutthereconciliationprocess.(whichisnotasimpleconcepttoexplain)Nearlyalljournalitemswillbereconciledatthebankstatementreconciliationprocess 2

    (paymentafterinvoice)orattheinvoicevalidation(paymentbeforeinvoice).

    Taxes

    Information on Journal Items IncurrentversionsofOdoo,asupplierinvoice/refundmaygeneratethefollowingjournalitems(basedonBelgiumaccounting,apurchaserefundinvoicewith21%ofVATonasingleproductcosting252.88):

    JournalEntry

    Account Taxes Debit Credit TaxCode TaxAmount

    1 440Payable 305.98 0

    1 411VAT 0 53.10 63 53.10

    1 611Charges 0 0 85 252.88

    2Thebankstatementreconciliation(anewconceptinOdoov9)isnotthesamethingthanthejournalitemreconciliation.(aconceptalreadyexistinginOdoo)

    9/55

  • 1 611Charges 21% 0 252.88 82 252.88

    Themainproblemwewanttosolvehereisthethirdlinewithdebit=credit=0whichisatechnicalhacktohavealinewithaTaxCode85andTaxamount,butnotaccountingentries.(weoftenhaveaccountantsthatreportsthisasabug)Wethinkweshouldsplit:

    Thedataaboutthejournalitems TheTaxLegalStatementthatshouldbeareportliketheP&LandBS.Wedontneed

    tostorethetaxcodesinthejournalitems,wejustneedtoknowwhichjournalitemshavebeencreatedbywhichtaxline.

    Thetablebelowarethejournalitemsforthesametransactionthantheonedescribedabove.

    JournalEntry

    Account Taxes Debit Credit TaxLineID

    1 440Payable 305.98 0

    1 411VAT 0 53.10 1

    1 611Charges 0 0 2

    1 611Charges 21% 0 252.88

    Insteadofhavingataxcodesreferredinthejournalitemstocomputethebaseandtaxamountsforthetaxstatement,theTaxStatementReportswillcomputetheseinformationusingjournalitemslinkedtospecifictaxes.Themainadvantagesare:

    Noredundancybetweendebit/creditandTaxAmountnopossibleerrors Nomorestrangejournalitemswithdebit=credit=0 Weremovetheconceptoftaxcodestructurethatwascomplextounderstand ThetaxstatementbecomesanormalreportsliketheP&L/BSsamereportengine,

    lesscode.

    Tax creation Ataxhasseveraltaxlinesbutcannotbedefinedasagroupoftaxes.Taxgroupscanbeimplementedusingseveraltaxlines.

    10/55

  • Everydocumentthatreferstoatax(invoices,expenses,)shoulduseamany2manyfieldfortaxesinsteadofmany2one.(e.g.SalesReceiptandPurchaseReceiptshouldbechanged).Thisway,SalesReceiptandPurchaseReceiptsaremultitaxes.Thereasonwhywedontwanttaxgroupsanymoreare:

    becauseitsabitoverlappingwiththeone2manytaxlines becauseweneedtobeabletomakethetaxdeclarationreport,anditmakesthings

    morecomplicatedifweallowtaxgroups.(e.g.isataxgroupataxinitselforjustashortcuttoselecttwotaxes?)

    Thatmeansthatsomeofthefieldsthatwerepreviouslyonthetaxaremovedatthelinelevel:includeinbaseamount,pythoncode.Thetaxlinesaresimplifiedtotheminimum:

    a(hidden)sequence(tomakeitdraggable), acomputationtype(availabletypesforthetaxpartarepercent,fixed,pythonandwe

    willadddivisionwhichisneededinsomecountrieslikebrazilandBolivia), thegeneralaccount(notrequiredifleftemptythejournalitemcreatedbythistaxline

    willusetheaccountofthesale/base.), theamount, ataxtypethatcanbeusedtogrouptaxesinreports,e.g.

    Deductible/NonDeductibletaxes thepythoncode(movedintoanotherextramodule) theincludeinbaseamountfield=>needtogiveanexamplehowitneedstowork

    Noteonhowtocomputepercentanddivisiontaxes:

    Percent:(currentmechanismofOdoo) PricewithTaxExcluded:Tax=Price*21% PricewithTaxIncluded:Tax=Total(Price/(100%+21%))

    Division:(anewtaxtype) PricewithTaxExcluded:Tax=Price/(100%12%)Price PricewithTaxIncluded:Tax=Price*12%

    Note:

    weshoulduseabetternamethandivision:PercentageofPriceTaxExcludedandPercentageofPriceTaxIncluded.

    wealsoaddacheckboxtoavoidhavingtodefinetwicethesametaxlinesforinvoicesandrefundsiftheresnodifferenceinbetween.

    Thebelgianpurchasetaxof21%thusbecomesassimpletodefineasthis:

    11/55

  • Tax Statement IncurrentOdoosversion,thetaxstatementreportisbasedontaxcodes.Therewasachartoftaxcodethatallowslocalizationtocreateataxstatementreportbasedonthesumofthefieldtax_amountfromaccount.move.line,groupedbytax_code_id.Wethinkitsanissuebecause:

    mostusersdidnotunderstandthetaxcodeconcept somelocalizationcomputesthetaxstatementbasedonaccounts,notontaxcodes

    Inv9,thoseinformationwillbecomputedbythereports.TherewillbeagenericreportcalledBelgiumTaxStatementthatwilljustprintthesummaryofbase/taxamountspertax.Moreover,eachlocalizationwillhavethepossibilitytodefineareportthatgivestheexactsameinformationaspreviouslythetaxcodeswereproviding.Letstakebackourexampleofabelgiansupplierrefundonasingleproductcosting252.88with21%ofVAT,andseehowbothreportscanbebuilt.Assaidbefore,wehadpreviously(v8)thefollowingjournalitems:

    JournalEntry

    Account Debit Credit Tax_code_id TaxAmount

    1 440Payable 305.98 0

    1 411VAT 0 53.10 63 53.10

    1 611Charges 0 0 85 252.88

    12/55

  • 1 611Charges 0 252.88 82 252.88

    While,inthev9,giventhetaxdefinedasexplainedintheabovesection,wewillhavethisinstead:

    JournalEntry

    Account Debit Credit Tax_ids Tax_line_id

    1 440Payable 305.98 0

    1 411VAT 0 53.10 #42(1stlineof

    purchase21%service)

    1 611Charges 0 252.88 #35(purchase21%

    service)

    Notethat:

    Thetax_idsisanewmany2manyfieldthatwillcontainallthetaxesinvolvedintheoperation.

    Thetax_line_idisanewmany2onefieldthatwillheldthereferencetothetaxlinethatcreatedthejournalitem.

    The generic tax summary

    13/55

  • ThatreportjustloopsoneachtaxlineandforeachgivestheNetamount(sumofjournalitemshavingtherelatedtaxinthetax_idscolumn)andtheTaxamount(sumofjournalitemshavingthattaxlineintax_line_id.Thetaxlinesaregroupedbytag(deductible,nondeductible)andthe2firstcolumnssimplyshowitsrelatedtaxnameandshortname.

    Handling the tax declaration in localization modules Becauseweneedtobeabletohavethetaxdeclarationinalegalformat,thetaxsummaryreportisntenough.Thatsthereasonwhywewantthelocalizationmodulestobeabletodefinereportsthatwillgivestheexactsameinformationasthetaxcodeswereprovidinginv8.Forthat,wethinkthatlocalizationmodulesshoulddefineaccount.financial.reportthatwillhaveeachpreviouslyexistingtaxcodeasalineinthereportandthatwillcomputetheamountsforthem.Forexample,inthebelgianlocalizationmodulewewilldefinethefollowingformulaethatwillgivetheexactsameinformationwehadbeforeontheaccount.move.line.

    taxcode formula

    14/55

  • 63 sumofjournalitemshaving#42intax_line_id

    82 sumofdebitofjournalitemshaving#35intax_ids

    85 sumofjournalitemshaving#35intax_idstocheck

    Moreexplanationontheaccount.financial.reportandthepossibilitiesofferedbyitinalatersection.TODO:

    removeaccount.tax.codeobject createaaccount.tax.groupobject:

    Namefield,translate=True AsData:

    Deductible NonDeductible

    implementthenewtaxsystem implementthegenerictaxstatementreport putthePythoncomputationontaxinaseparatemodule implementthebelgiantaxstatementasanexampleofcomplexstatement

    Periods & Fiscal Years management Theconceptofperiodisonlyusedfor:

    beingabletocloseaperiod(toavoidpostingjournalentrieswhenyoualreadyreportedtotheestate,forexample).

    SetanaccountingperiodondocumentsTheperiodconcepthasafewissues:

    Usability:creationoffiscalyearsandtheyrelatedperiods SpecialPeriodforOpeningEntries Usersoftendothemistaketofilterondatesratherthanperiods.(forinstancetheget

    theturnoverofthelastmonth). Whenworkingwithmultiplecompanies,itsconfusingtohaveseveralperiodsforthe

    sametimedelta. simplifythereportsoptionswherewecanjustfilterondates

    15/55

  • Insteadofusinganobjectandchoosetheperiodwithamany2oneondocuments,wewillreplacetheperiodbyanAccountingValuationDateondocuments.Forexample,therewillbetwodatesontheinvoice:

    theInvoiceDateandtheAccountingDate. theaccountingdatewillbesetautomaticallywhenonchangetheinvoicedate Theaccountingdatefieldis:

    hiddenoncustomerinvoices visibleonsupplierinvoices

    Wealsoneedtotakecareoftheperiodclosing.Weplantohaveafreezedateonfiscalyears,thatwillpreventcreating/modifyingjournalentriesinajournalifitsaccountingdateisbeforethefreezedateofthejournal.TODO:

    replacetheperiod_idwithanewdate_accountfield removeaccount.periodtable increationoftheanalyticlines,usethisnewaccountingdate Onfiscalyears,addafreezedate:freezealljournalitemsuntil__/__/____(will

    replacetheconceptofclosingaperiod) weneedtoimprovethefilteringondatesranges,forkeepingeasinessonreport

    options:weshouldbeabletofilterinoneclickonperiodsordates:Lastquarter,YeartoDate(usingFiscalYear1stday),ThisMonth,(shouldbeokwiththetaskofGery)

    Removethefieldonthejournal:forcetheInvoiceDatetobeintherelatedperiod.thiswillbemanagedbydocument,notbyjournals(e.g.supplierinvoice:2dates,customerinvoices:1date,expenses:1dateondocument,1dateperline,...)

    Fiscalyearshouldbecomeoptional,andnotmandatory.Thiswillallowto:

    avoidaconfigurationwizardatinstallation avoidtocreateafiscalyearbeforepostingnewinvoicesinanewyear(accountants

    alwaysforgetthis)Fiscalyearswillmostly(only?)beusedinreporting:

    Computationoftheopeningbalanceaccordingtotheaccounttype Easyselectionofthefilters(ThisYear,PreviousYear)andcomparisonswithlastyear.

    Alloperationswillbebasedondates,notonfiscalyearsanymore.Thismeans,wecancreatefiscalyearsafterwards.Wejustneedtheconceptoffiscalyeartohavemoreefficientfiltersinreports.WecansetamessageontopofreportsifthefiscalyearisnotcreatedintheP&L:Nofiscalyeardefined,thisreportcomputesOpeningBalancesincethe1stofJanuary.pleasecreateafiscalyeartorefinethis.TODO:checkwherefiscalyearareusedtovalidatetheabovespecification.

    16/55

  • Fiscal Year Closing Weplantoremovetheconceptofopeningentrieswhenclosingafiscalyear:

    Reportsarealwayscorrect,eveniftheprecedingfiscalyearhasnotbeenclosed Easierforenduser:noneedtoconstantlygenerateopeningentriesforreporting,

    removethem, Noredundancyonreceivable/payableentries Noneedforanopeningperiod Noneedforanopeningjournal

    EveryreportwillimplementcorrectlytheOpeningBalance,atthereportlevel,notdependingonopeningentriesjournalitems.So,fortheaccountant,thisdoesnotchangeanythingonreports.Hejustdonothavetoworryaboutgeneratingopeningentries.>Theopeningbalanceiscomputedatthereportinglevel,notbycreatingJournalEntries(it'salreadypartiallylikethatinsomereports)TheOpeningBalanceofanaccountshouldbecomputedaccordingtotheaccounttype(P&LorBS)andthisshouldnotbediff,Indeed,itshouldbetheroleofthereporttocomputetheinitialbalancewhatevertheopeningentrieshavebeencreatedornot.Thebiggestadvantageswouldbetohavealwaysthereportsthatarecorrectwithoutanyworkfromtheaccountants.Noneedanymoretoregenerateeachtimetheopeningentriesbeforeprintingthebalancesheet.Noneedtohaveacrappyspecialmovewhereeverythingisreconciledtogether.Inthebalancesheet,weaddalineCurrentYearEarningswiththenonaffectedresult,thatisnotanaccount,butcomputedbasedontheP&L.Westillneedtoclosefiscalyearfor:

    creatingtheRetainedEarningsjournalentry. freezingperiods

    Whenclosingafiscalyear,wecheckthattheCurrentYearEarningissetto0.Ifnot,weopenadialogmessagewithasampleentrytoregister:CurrentYearEarningRetainedEarnings.Wedonotcreatethisentryautomatically,itsjustamessagefortheenduserwithasuggestion.(becauseyousometimeswantsomethingdifferentfortheaffectationoftheresult)

    Setting Initial Account Balances Weneedatooltosettheaccountbalancesforcompaniesthatstart:

    17/55

  • InSettings/Accounting,addabutton:SetInitialBalances(putthisintheplannertoo) Thisopensaneditablelistviewofallaccountswithdebitandcreditbeingread/write Ifyouwriteindebit/credit,itcreateajournaliteminaCentralisedand

    Miscellaneousjournalwiththedifferencebetweenthecurrentdebitandthegivenone.

    ThisapproachworksforbothcompaniesthatstartfromnothingorthosehavingusedOdooforbillingduringafewmonthsandthatdeployaccountingafter.

    Sequences management Weshouldbeabletoeasilymanagethesequences.Currentlytheusabilityisapain.Actually,peopleshouldntatallbeawareofsequences.SincetheFiscalyeararenotrequiredanymoreinorderforthesystemtowork(wecanusethembutwecanalsosimplyuseasetofdaterange),wecantbaseourselvesontheFYforthesequence.Whatwewantistheabilitytocreatesequencebyrangeofdate,andthatfeaturecouldalsobeusedinothermoduleandnotonlyaccounting.Therefore,wewillchangedirectlytheir.sequenceobject.Whatneedstobedoneisthefollowing:

    addabooleanfieldsontheir.sequenceobjectinordertoknowifweshouldusethedaterangefieldsornot

    addaone2manyfielddate_range_idsthatpointstoanewobjectir.sequence.date_range

    thatnewobjectonlyhasafewfields: range_from range_to number_next number_next_display(fields.functionthatdoesthesameasthe

    number_next_actualfieldinir.sequence)usedtodisplaytheinformationontheviewandlettheuserchangeitifhewants

    bydefaultthedaterangewillbealltheyear(from1stjanuarytill31thdecember)

    intheget_nextmethodcalledtogetthenextincrementalnumber,addaconditiontocheckifweusedaterangeornot.ifself.use_date_range:

    ifcontext.get(date,today())existsinself.date_range_ids:

    18/55

  • incrementnumberincorrectir.sequence.date_rangeandreturnthatoneelse://wedonthaveair.sequence.date_rangeyet

    createnewir.sequence.date_rangeandstartnumberingatone addaviewtoseetheir.sequence.date_range

    Note:whencreatinganewir.sequence.date_range,checkifwedontalreadyhaveair.sequence.date_rangethatexistforthecurrentyear,ifyes,taketheonewiththeclosestrange_to(inthepast),incrementitbyonedayandusethatasrange_fromforthenewir.sequence.date_range(range_togoesbydefaulttoendoftheyear,exceptifwehaveair.sequence.date_rangeobjectwitharange_frominthefutureinwhichcaseweshouldusethatdayminusoneasrange_to)

    Accounts

    Account Hierarchies Removethehierarchiesinthechartofaccountsandreplaceitbyoptionaltags(thatcanbeusedtocreatehierarchiesintheCoAreportkeepinmindthattheCoAwillbeareportonthescreen,notanymoreatreeview.Thiswillallowsmartfilters,optionslikecomparisons,...):

    TheconceptofParentAccountistoocomplex.Weoftenseeaccountantsthatcreatesaccountswithoutparents.

    TheconceptofViewAccountsorRootNodeistoocomplex Beingforcedtocreatethewholestructureinordertostartistoocomplextoo.(note

    fromRonda:fortheU.S.version,considerstartingwiththeaccountslistedonthe1120taxformscheduleL,page6ofPDF:U.S.chartofaccount.)

    Whatwillitsolve:

    EasiercreationofanewAccounts(noparent,noviewaccounts,nostructuretoprecreate)

    Easiertoimporttheinitialchartofaccount(justaCSVofaccountnamesandcodes) Workingonalistofaccountsismucheasierthanbrowsingatreeofaccounts(youcan

    filterallaccountsofclass30*,filteronthenametoaccessquickly,groupbyType,)ThedefaultwaytobrowseaccountsSHOULDNOTBEanymorethroughtheChartsofAccountstreeview.TheuserwillbrowsethedatathroughtheHTMLreports(P&L,BSorChartsofAccounts)thathaveahierarchy.Havealookatthereportingsectionbelowtounderstandthis.LegalreportsWILLhaveahierarchybutdefinedbythereport(Profit,Loss...)WekeepthelistviewofaccountsfortheConfigurationsection.(notforadailyusage)

    19/55

    http://www.google.com/url?q=http%3A%2F%2Fwww.irs.gov%2Fpub%2Firs-pdf%2Ff1120.pdf&sa=D&sntz=1&usg=AFQjCNGEgWO8z8ekWL484L_mlk0qZz8r0g
  • Wekeeptheaggregationsystemforconsolidationofmultiplecompanies(wewillalsoaddapercentageontheconsolidationreportforcompaniesthatarentownedat100%).WeaddTagsonaccountsthetagswillbeusedforreportingand,eventually,thehierarchyintheCoA.TODO:

    Removeparentaccountsandchildrenaccountsonaccount.accountobject Changethewaycreditanddebitarecomputedonaccounts(noneedtosumchildren

    accounts) Removethetype:Viewonaccountforms Addanewfieldmany2many(account.account.tag)toanewobjecthavingthe

    followingfields: Name

    Defineanon_changemethodtoautomaticallyselectthetypeandthetagsbasedonthecode:assignthetagsandtypeoftheaccounthavingthebiggestnumberofdigitsincommonandminimum2(iflessthan2,dontassignanythingtothesefields.)

    RemovetheChartofAccountsmenu.(thetreeviewonaccounts)thelistofaccountsisenough.Moreover,wewillhaveaGeneralLedgerreportthatrendersachartofaccountswithahierarchy.(newreportsareonscreenwithfiltersandoptionslikecomparisons.)

    Tounderstandwhyitseasiertoworkonlistsofaccounts,youneedtounderstandthetaskthatimprovessearch,filterandgroups.Youcantesttherelatedmockuphere:http://k2lkjf.axshare.com/#p=advanced_search&hi=1&c=1(thisisadynamicmockup,trytoclickontheexpandfiltericon)Itssupereasytofilterorgroupbyaccounttypes(andthiscreateshierarchiestoo).

    Active accounts TheconceptofActiveistoocomplex,andreferstosomethinguncommonforaccountants.Weproposetoreplacethatconceptwiththefollowingrulesandmeasures:

    Theusercandeleteanaccountifithasnojournalitems Iftherearejournalitems,wecannotdeleteit Iftherewerejournalitemsinpreviousfiscalyearsbutnotinthecurrentone,this

    accountdoesnotappearinreports. ReplaceActivebyDeprecatedcheckboxtheaccountisstillvisiblebutnot

    accessibleinmany2onelinkingtoaccounts.Thatway,thesamefeaturesareavailablebuttheusabilityisimproved.

    20/55

    http://www.google.com/url?q=http%3A%2F%2Fk2lkjf.axshare.com%2F%23p%3Dadvanced_search%26hi%3D1%26c%3D1&sa=D&sntz=1&usg=AFQjCNHkyKhaP9v0JmMW2-rQp61NMvVgww
  • TODO: Removetheactivefieldonaccounts(youcandeleteanaccount,butnotunactiveit.) CreateaDeprecatedcheckbox RemovetheCloseaccounttype Putdomainsonallmany2onelinkingtoaccountstonotseedeprecatedaccounts.

    Account Types Currently,anaccounthastwotypes:

    AccountType:usedtechnically(views,aggregation,receivable,payable) UserType:dependsonthecountry,usedforlegalreports(P&L,BS)

    Inv9,anaccountdefinitionformshouldonlycontainonefield:theUserType(renamedintoType).ThecurrentAccountTypeshouldbeafieldontheUserTypeobject.

    TODO:improvethismockupstoaddTags,amany2many_tagsfield.

    21/55

  • Notethatpeoplewillstillbeabletocontinuedefiningtheirownusertypethroughtheconfigurationorlocalizationmoduleiftheywantbutwebelievethiswontbenecessarymostofthetimeasweplantocreatebydefaultthemainones(revenue,sales,directcosts,otherincome,expenses,depreciation,overheads,currentassets,prepayments,bankaccounts,fixedassets,noncurrentassets,currentliabilities,liabilities,noncurrentliabilities,equity).TODO:

    Onaccount.account.type: Putatypeselectionfield,withsamedefinitionthanthecurrentoneon

    account.account Onaccount.account,thetypefieldbecomesarelatedtouser_type_id.type

    RemovetheTypefieldfromtheformview createintheaccountmodule,thefollowingaccounttypes:revenue,sales,directcosts,

    otherincome,expenses,depreciation,overheads,currentassets,prepayments,bankaccounts,fixedassets,noncurrentassets,currentliabilities,liabilities,noncurrentliabilities,equity)

    configurethebuiltinprofit/lossandbalancesheetreportsasshownbelow:

    22/55

  • Journals Journalsshouldhavetwosequences:

    Invoices(alreadyexists) Refunds(newmany2onefieldtoadd)

    Thisallowscompaniestoputinvoicesandrefundsinthesamejournalorcreatetwoseparatejournals.Advantagesofputtinginthesamejournal:

    Turnoveriscorrectinthelistofinvoices(invoicesrefund) Dashboardissimplified(not2xeveryjournal)

    Bydefault,attheinstallationofthesoftware,onlyonesaleandonepurchasejournalsarecreated(invoiceandrefundareinthesamejournal).Thisallowstohaveacleardashboardandnotduplicateeverymenu.Whencreatingarefundbasedonaninvoice,ifthesequenceissetforarefund,thesystemdonotaskforajournalandautomaticallyputtherefundinthesamejournal(inthewizard).Inthedashboard,thebuttontocreateaninvoicehasadropdowntoalsocreatearefund.Likethis:http://getbootstrap.com/components/#btndropdownssplit

    Invoices Addacomputedfieldoninvoices:amount_total_signedwhichistheamountinthecurrencyofthecompanyandnegativeforrefundinvoices(orrefundsupplierinvoices).Displaythisfieldinlistviews(insteadofthecurrentamount_totalone)butnotinformsviews.Thiswouldallowtoputinvoicesandrefundinvoicesinthesamemenuandhavethetotalbelowwhichiscorrect.Theonchangetosettotalandtaxesshouldbeautomatic.ThiswouldbeanautomaticwinwhenportingtothenewAPI.Changedata/demodatathedefaultistousethesamejournalforinvoicesandrefundratherthantwodifferentjournals.Peoplecouldchangethisbutbydefaultwewillputinvoicesandtheirrelatedrefundsinthesamejournal.

    23/55

    http://www.google.com/url?q=http%3A%2F%2Fgetbootstrap.com%2Fcomponents%2F%23btn-dropdowns-split&sa=D&sntz=1&usg=AFQjCNFfhdLMfh1eS_L02Wqt3P45DtpPvw
  • Payment Orders PaymentshouldbemanagedbythePayInvoicebuttononsupplierinvoices,insteadofthecurrentPaymentOrderform.Onceinvoicesarepaidviathisbutton,amenucanbeusedtosendthepaymentstothebanks.(orgeneratefileslikeSEPA).So,paymentorderarereplacedbyjournalentrieswithastatus.Youmustbeabletosearch/filteroninvoicesbasedontheirpaymentstatus:ToPay,PaymentOrdered,PaymentDone.

    Removetheaccount_paymentmodule Putapayment_statefieldonjournalentriesaccount.move

    None Todo Done

    Onthejournal,ifitsabankjournal,adda: payment_typefieldselection:

    Manual CheckPrinting SEPA(ifaccount_sepaisinstalled)

    InthePayinvoicewizard,displayaselectionfield,withdefaultcomingfromthejournal:

    Payvia:SEPA,manually Inthepaymentordermenu,displayalljournalentrieshavingpayment_stateintodo:

    Domain:payment_stateNone DefaultSearch:payment_state=todo

    Onsupplierinvoices,addawizardallowingtomarkselectedinvoicesforpaymentinbatch.ThisallowstodoBulkPayments.Thiswizardletsyouselect:

    Paymentmode:Journal PaymentMethod:SEPA,Check,(comefromtheselectedjournal)

    nearthepaymentmethods,youhaveinformationlike: CurrentBalance:4500 ToPay:2300 ScheduledforPayment:1000 Balance:1200

    Date:Directly,AtMaturityDate

    24/55

  • Model of journal Items Weplantokeepmodelofjournalentries,butnotsubscriptions.Thesubscriptionmechanismwillbereplacedby:

    contracts:forinvoicebasedsubscriptions(alreadyexists) modelofjournalentries:thatcanbecalledeasilyinajournal modelofjournalentriesinbankreconciliation(alreadyexists)

    Remove(temporarily?)subscriptionsonjournalentries.Thefeatureisnotgoodenoughtobemaintainedasitis.Moreover,thenewtoolsallowstobettermanagerecurringentries:

    bankloans:usemodelsduringbankreconciliationprocess rentals:youcanuserecurringinvoicesoncontracts payroll:usemodelofentriesandchangethemonceamonth socialtaxes:samethanpayroll.

    Asitwillbeveryeasytocallamodelorusemodelsduringbankstatementsreconciliation,Ithinkwedontneedsubscriptiononjournalitemsanymore.TODO:

    removetheobjects addabooleanfieldonjournalentries:JournalEntryModel Addabuttononjournalentriesformviewtocallamodel,selectamodelinthesame

    journalandthejournalentrysautomaticallycreated. Addasaveasamodelwizardonjournalentries(youcangetitfromtheMore

    menu)

    Notes for New API conversion toreviewagainbasedonthedecisionsmadeintheothersectionsSometechnicalcommentstocleanwhenportingtothenewAPI.

    account.py removemethodcheck_cycle(sinceweremoveparent_id) payment.term:

    Thelatestrowofapayment.termshouldalwaysbebalance payment_term.line

    Valuesshouldbein%,insteadofbetween0and1 account.account.type

    removethefollowingmethod(andcheckwhyweneededit) _get_financial_report_ref _save_report_type

    25/55

  • _get_current_report_type close_method:

    removetheDetailone checkifwestillneedtheunreconciledone

    removemethod_code_get(usemany2oneinsteadofselectionfieldfortype) account.accountobject:

    removeparent_id,parent_left,parent_store remove_get_level,_get_child_ids,_check_recursion,_check_type,

    _check_account_type,_check_company_account simplifyname_search

    removethefeaturethatallowtosearchonname:...ortype:...? name_get

    accordingtothecontext,name_getshouldreturn Code(only) CodeName

    removecopymethod(andpossiblysetcopy=Falseonsomefields) remove_check_allow_type_change remove_check_allow_code_change(forgetaboutthemessageaboutlackof

    confidence.PeoplewilllikeOdoobecauseitssimple.) account.fiscalyear:

    removecodefield,keeponlyname removename_searchmethod renameend_journal_period_idintoend_journal_id(many2onetojournal,)

    removeobjectaccount.journal.period(andeverythingrelatedtoit) account.moveobject:

    removeaccount_move_prepare(thismethodisnotusedanywhere) account.move.reconcile:

    removeline_partial_idsfield removetypefield removeconstraint_check_same_partner???todiscussiinworkshop removereconcile_partial_check removename_get(sincethereisnopartialanymore,noneedforaspecific

    name_get) removeaccount.modelandaccount.model.line(andeverywhereitisused) removeaccount.subscriptionandaccount.subscription.line(andeverythingrelatedto

    this) removeaccount.

    account_analytic_line.py removethesearch()method.Checkifsomemethodsareusing(from_dateorto_date)

    inthecontextanduseadefault_searchonthecontextinstead.

    26/55

  • account_bank.py checkwhyweneedpost_write?Thiscodeshouldprobablybemovedelsewherein

    thecodethecreatethebankandjournal

    account_bank_statement.py Separateaccount.bank.statementandaccount.cash.statementintotwoobjects

    (eventuallyinheritingfromthesameobject) Alotofmessiscomingfromthis

    account.statement.operation.template Wemayneedbothafixedamountandapercentageamount(ANDorOR)

    account_move_line.py removemethoddefault_get_move_form_hook removeconverttoperiod default_getshouldbesimplifiedALOT

    noneedtocomputeremainingbasedondebit/credit/taxes removedefault_get,putdefaultmethodsonfields

    removefieldinvoice removelist_periods,list_journals (probablymoresimplificationtodohere)

    module structure Removethesubfolderaccount/projectandputeverythingrelatedtoanalyticaccountingintoasingle.pyand.xmlfiles.

    Change everywhere: thecontextshouldnevercontainperiod_idorjournal_id!

    usedefault_period_idanddefault_context_idinstead

    Wizards Removethefollowingwizards(andeverythingrelatedtothem):

    account_automatic_reconcile.py account_change_currency.py account_chart.py account_journal_select.py account_reconcile_partner_process.py account_subscription_generate.py account_use_model.py

    27/55

  • Misc Onaccount.move,addafields.reference(Origin)thatistherealdocumentthatcreatedthisentry:

    saleinvoice,purchaseinvoice,salesreceipt,purchaseReceipt,Asset,bankstatement Ifnothinginreference,itsaJournalEntry

    RemovethedecimalprecisionAccountandinsteadofit,

    roundbyusingthecurrency(foreigncurrencyinvolvedorcompanycurrency) storethefulllengthofthedecimalindb usewidget=monetaryinviewssothatthedisplayofthesefieldsarestillfine

    Bank and Cash Statements Thecurrentimplementationofbankstatementsandcashstatementsisugly.Iwouldsuggesttosplititintwodifferentobjectssothattheycaneachimplementitsownlogicwithouthavingsideeffects.Refactorthecodesothat:

    account.statement&account.statement.linebecomesthemainobject: renameobjectaccount.bank.statementaccount.statement renameobjectaccount.bank.statement.lineaccount.statement.line

    account.cash.statement_inheritsfromaccount.statemenetandaddhisownlogic.Changethemenusandscreenstodirectlyworkontheaccount.cash.statementforcashregisters.

    Expenses Inthev9,employeeswilldirectlycreateexpenselines(orexpenselinescanbecreatedbyusersonbehalfofothersemployees)insteadofcreatingexpensesheets.Hereisapropositionofanewuserflow:

    1. Userscreateexpenses2. TheycanclickSubmitonexpenses:

    a. whensubmited,theexpenselineisaddedtotheexpensesheetthatisstilltovalidateforthesameuser.

    b. Ifnoepxensesheettovalidateexists,anewoneiscreated3. TheHR/Managercanvalidateexpensesheetsthatareintovalidate4. Theaccountantcangenerateentriesforvalidatedexpensesheets

    TODO:

    28/55

  • renamemodulehr_expenseexpense renameobject:hr.expense.lineexpense renameobject:hr.expense.expenseexpense.sheet addastatefieldonexpenseobject:DraftSubmited addabuttonDocumentsonexpensesheettoopentheattachmentsofrelated

    expensese.g.scanneddocuments Createamobileapptoeasily:

    Takeaphotoofanexpense Registername&Price SendtoOdoo Trackstatusofexpenses

    Thetax(es)shouldalsobeselectableontheexpenseline.

    29/55

  • Reporting Engine Inthepast,wehadtwodifferentusagessupporteddifferentlyintheapplication:

    List/Treeviewstobrowsedatainthescreen(e.g.treeofaccounts) PDFreportstoprintdata(e.g.P&LandBS)

    Inthefuture,reportingshouldbecomethedefaultwaytobrowsethedata.ReportingwillbenormalHTMLviewsthatopensinthenormalUI(keepingtheleftmenu).Wizardsarereplacedbyfiltersandoptionsonthetop.Whetheryouwanttoworkonthedata(inthescreen)orprintthemitsthesame.Forperformanceissueswithhugereports(e.g.generalledger),wecanusepagerandlazyloadingtomakethemveryfast.Ofcourse,ifyouclickonPrintbutton,itstillusesthewebkitprint(witheverythingunfolded)Onthetechnicalpointofview,reportswillbegeneratedserverside.Thatmeansthatifwewantthemtobedynamic,weneedtosplititintoseveralssmalltemplatesandwhendoinganaction(likefold/unfold)wecanonlycallthesesmalltemplatesandreplacetheminsidethegeneratedhtml(thisinordertopreventreloadingtheallreportwheneverwechangesomething)

    30/55

  • TODO:improvethemockup.Itsnotgoodenough.Thereportinghastobeakillingfeature.Wehavetodo3samplereportsinmockupstogointothedetailsofthefeatures.E.G.:wecanusegraphsontopofthedatatable(likeingoogleanalytics)putpostitseverywhereonthepage,addsparklinesnearaccountnumbers,...Weshouldbrainstormabitmore.whataboutusingpivottables?NoaccountingsoftwarehasarealBIintegrated.Wewilladdactionsinthereporting.(e.g.youcanreconcilejournalitemsdirectlyfromthepartnerbalancereport)Ifyoufindjournalitemstoreconcileorifyouwanttodrilldowninanaccount,youcandoitdirectlyfromthereport.Thefiltersareonthetop.Youllbeabletochangetheoptionsandwillseetheresultinthesamepage,orexpandsomepartofthereportassomelineswillbeclickable(e.g.clickonanaccounttozoomintoit)Wecanimplementfold/unfoldinthereportaswell.

    31/55

  • Theideaistoofferthepossibilitytouserstoplaywiththeoptionuntiltheygettheinformationtheyneed.Then,theyhaveabuttontoprintthecurrentreportdisplayedinapdf.WecanalsoaddfeatureslikeAddaCommentoneveryline/header/footer.(likepostit)Thisway,theaccountantcancommentareportbeforegivingittothemanagers.Simpleexample:PrinttheAgedReceivablereportandputnotesfortheresponsibleofthecreditcollectioneffort.(checkwhythiscustomerdidnotpay,hetoldmeitshouldhavebeendonelastweek)Listoffeaturesonreports:

    filters/groupbyonthetopofthesheet Addnoteseverywhere Fold/Unfold(exampleP&L,BS)inJS Drilldown(clickonanaccounttogetitsdetailedjournalitems) optionalgraphsand/orsparklines Weneedextrafieldsliketagsontheaccountthatcanbeusedtogroup. Weshouldbeabletocreategroupsthataremasterdataindependentofthechartof

    accountinwhichweputtheaccountswewanttoanalysetogether.Especiallyifthereisnotmuchdoneinanalyticaccounting.Thesegroupsshouldbeusedasaselectioncriteriaandalsoagroupingcriteriainreporting.

    Developmentinprogressonhttps://github.com/odoodev/odoo/tree/masterhtmlreportconfiguratorpvyEvenifsomeoptionsofthefiltersarecommon(YoYcomparison,accrual/cashbased),someoptionsshoulddependonthereport,example:

    P&LDates:fromto BSdate:At

    Reportstoadd:

    Executivesummary(ratioliketheBesoinenFonddeRoulement(WorkingCapital),disponibilitdetrsorerie,)

    ChartofAccounts/GeneralLedger(note:itlookslikethetermGeneralLedgerisnotthesameinU.S.orinEurope:Insage,thegeneralledgerisaprintofalljournalitemsperaccount.InXero,itsallaccountsandtheirbalance,butyoucanclicktozoomtothejournalitems)

    Cashflowstatement TaxSummary(kpitocontrolthetaxreportiscorrect) Partnerstatement(animprovedAgedBalance)

    Replaced:

    theGeneralledgerwillreplacedbythelistviewofaccount_move_lineinordertobeabletohavemoreflexibility(search,group_by,etc)

    32/55

    https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fodoo-dev%2Fodoo%2Ftree%2Fmaster-html-report-configurator-pvy&sa=D&sntz=1&usg=AFQjCNEmyhwmbnBtyIaMuL5mCkECpEBcOg
  • Allotherreportshavetobeimproved:agedbalances,p&l,bs,ImplementtheAccrual/CashBasedasanoptiontomostreports.cashflowstatementexample:

    Reports Metadata currentlybeingwrittenSomeaccountingreportsshouldbedefinedusingaccountfinancialreport:thesearetheP&L,BS,ChartofAccount(TrialBalance),CashFlowStatement,ExecutiveSummaryandallthecountryspecificreports.Alltheotherreports(taxgeneric,agedpartnerbalance,followup,...)willusecustomcodeandwontbebasedonaccountfinancialreport.Account.financial.reportshouldbebasedonfilters,thatwaywecanspecifyitforanyaccountorotherfinancialreports.ThiscouldbeusedtocreatehierarchiesintheChartofAccount

    33/55

  • report(notanymoreatreeview)ortocreateKPIsintheexecutivesummaryliketheBesoinenFonddeRoulement/WorkingCapital.Wegonnasplitthecurrentaccount.financial.reportin2models:account.financial.reportandaccount.financial.report.line.Thefirstoneistheretodefinedthereportandglobaloptions,suchasnumberofcolumnsinsidethereport(debit+credit+balanceoronlybalance),header,andsoon.Itwillservethesamepurposeasthecurrentwizardwehavewhenopeningareport.Thesecondmodelcorrespondtothecurrentaccount.financial.reportShouldbegenericforallreports:

    Targetmoves(allentries,postedentries) date_from date_to

    Object:account.financial.report

    Boolean:allowcomparison Boolean:allowcashbasismethod Boolean:showdebitcredit Boolean:showbalance ReportTitle

    Objet:account.financial.report.line

    Domain(tospecifywhichjournaloraccounttoshow)(shoulduseir.filters) groupby Referencefield:Actiontoperformwhenclickingonaline(openaccount,invoice,

    other) Type:selection:

    Accountstoberemoved,itsmoreflexibletoforceusingtags AccountTypes AccountTags Reportstoberemoved,wecanuseformulaeforthis SumofChildren Formulae

    Formulae

    e.g:[Income]/[Income,1]*100(incomegrowth) Canbebasedon

    [ReportCode] [ReportCode,1,debit]precedingperiodanalysed [ReportCode,1:3,debit]preceding3periodsanalysed [ReportCode,0,debit]currentperiod

    {tag}notsureifReportCodeisenoughornot? {tag,1}samethanReportCode

    34/55

  • #DaysNumberofdaysintheanalysedperiod #Days[1,3]Numberofdaysinthelast3periods

    #MonthsNumberofmonthsintheanalysedperiod ReportType:

    Currency,Percent,SimpleFloat DisplayDetail

    SumOnly AllAccounts AllJournalItems

    DrillDown: Show.

    Style h1,h2,h4,h4,p

    Possibilitytohavepythoncode(withasafeeval),thatwaywecandothingslikeiftotal>0thenprintsomethingelseshownothing

    ShouldbeabletoprinttaxdeclarationtooTODOfullspecOneveryreport,whenclickingonaline,itshouldopentherightdocument,accordingtotheoriginreferencefieldontheaccount.move.

    Followups Review Thefollowupsgonnabeimprovedinthefollowingway:accountmainmodulewillhaveasimplefollowupsystemmadebyinvoicethatshouldbeenoughformostofpeople.Theadvancedfeatureswillbeaddedbythecurrentaccount_followupmodule.

    account module: Onthelistviewofinvoice,allowtoeasilyaddanexpectedpaymentdate.Orderthelistofunpaidinvoicebyexpectedpaymentdate(firsttheoneswithoutexpecteddate),highlightinredtheoverpassedones.Onthesameinvoicelist,youcaneasilyloganinternalnoteordotheusualstuff(printtheselectedinvoices,sendthembymail..).Thenewthingisthatyouhavethepossibilitytosentthecustomerstatement.Thatactionmakeyoujumponthelistofpartnershaveareceivableaccount>0andshowingtheirdueamountandlastremindersentdate.Youcanselectonlysomeofthemandeffectivelyprintthecustomerstatementwhichlisttheirinvoicesandpaymentsunderastaticcustomizabletext(tosetonthecompany).ThereportisHTMLmadeandfirstdisplayedonthescreenbeforeyoureactuallyabletoprintit.

    35/55

  • account_followup module: Oncethismoduleisinstalled,userscanusethefullpowerofthecurrentmodule:defineseveralfollowuplevelwiththeirlevelspecifictexttoprintonthecustomerstatementinplaceoftheregulartextandaccordinglytothehighestlevelofthepartnersinvoices.

    36/55

  • New features

    kanban journal as a dashboard Menusaretoocomplex.Withacleankanbanview,theuserwillnotevenneedtousemenus.Alotofmenusmayberemovedduetothis.(functionlikeimportBankStatementcanbedonedirectlyfromtheKanbanviewwithabigbuttonontheBankjournal).Thekanbanviewofjournalswillhelptoreducethenumberofmenuitemsbyprovidingsomeinfoinahandywayandshortcutsdedicatedtothetypeofjournal.WhenyouclickontheAccountingmenuitem,youarriveinthedashboard(=kanbanviewofjournal)Eachjournalwillshowvariousactionandinformationaswellasshortcutsfortheuser.Hereisthelistforeachjournaloftheactionsitneedstobeabletoperform:Salejournal:

    a2linedchartshowingthecurrentmonthturnoveragainsttheturnoveroflastmonth figuresandshortcutswillbeforthesalejournalANDfortheassociatedsale_refund

    journal Howmany(draft,duethismonth,tobesend)invoiceswehave Linktosee/createinvoices paymentfollowupactions

    Purchasejournal:

    agraphshowingtheestimatedcostovertime.graphshouldstarttodayandvalueshouldgoincreasinglyforthefuture(aswehavedraftandvalidatedpurchasethatwillcome)

    figuresandshortcutswillbeforpurchasejournalandassociatedpurchase_refundjournal

    showhowmanydraft,due,validatedpurchaseswehave Linktosee/createpurchaseinvoice

    Bankandcashjournal:

    Linegraphshowingjournalentries TransferMoneyNewwizardtodevelop,tocreateajournalentry SendMoneyPurchaseReceiptwithdefaulttothebankaccount ReceiveMoneySalesReceiptwithdefaulttothebankaccount ReconcileAccount ImportaStatement View/createstatements

    37/55

  • canbetestedon:https://github.com/odoodev/odoo/tree/masterjournaldashboardcsn

    Thedesignerswillmakethisdashboardbeautiful.Notethat:

    thegraphsshouldonlybevisibleforthemanagersoftheaccountingapplication(todealwithaccessrightsrestrictions)addhegroupinthekanbanview

    inthekanbanview,userswillonlyseejournalsforwhichtheyhavebeenaddedasusers(astheywoulddoforprojects)

    possibilitytoaddsomejournalsinfavorite(byclickingonasmallstarforexample),thosewillshowontopoftheview.

    onlyAdvisorgroupcanseethegraphHereishowitlookslikeinXero:(mainbuttonslikeReconcileonbankstatementjournalorCreateInvoiceonsalesjournalaredirectlyinthisview)

    38/55

    https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fodoo-dev%2Fodoo%2Ftree%2Fmaster-journal-dashboard-csn&sa=D&sntz=1&usg=AFQjCNFwF9lVzDs6ZgoUp4V-hIb-ENEgLg
  • Noteaboutmoneytransfer:Atraditionalapproachtotransfermoneyfromonebankaccounttoanotheristouseanintermediaryaccount(e.g.inBelgium,58virementsinternes)Butmostaccountingsoftwaredonothaveagreatbankreconciliationfeature:youcanpreregisteratransactionanditsreconciledafterwardswhenreceivingthebankstatement.Butwithagoodbankreconciliationmechanism,itchangeseverything.IjusttestedXeroandtheydoadirecttransferthatkeepsa"unreconciled"status.It'satthesametimemorepowerfulandeasier:

    Morepowerful:asyoudirectlygivetherightdestinationaccount,thesystemexpecttogetthistransferinthisspecificaccount.(forecastsarebetter,reconciliationiseasier)

    Easier:noneedtoworryaboutintermediaryaccountsandreconcileentriesinthisaccount.It'sfaster,youonlyhaveonetransactiontorecord,thereconciliationisdoneathestatementofthesecondbank.Moreover,intermediaryaccountsareanightmareinmulticurrencies.(howdoyouknowifthedifferenceisduetocurrencyexchangeratesorprofit&losswhenreconcilingafterwards)

    So,themoneytransferwizardsshouldonlyhavethefollowingfields:

    Date FromAccount ToAccount

    39/55

  • Amount Communication

    ItshouldjustcreateaJournalEntry.(directlyfromonebank/cashaccounttoanother)Itcanbeagainstthehabitofsomeaccountantsthatareusedtouseanintermediaryaccount,buttheycanstilldothatduringthebankreconciliationprocess(eveninoneclickusingmodelofentries)

    40/55

  • Banking flow Assaidintheintroduction,oneofourprimaryobjectivewillbetosmooththeprocessesrelatedtothebankingflow.TheimportofCODA,.OFXand.QIFfileshavealreadybeendeveloped.TheSEPAintegrationisalsointhepipe.(directdebit,payments,bankstatementimport).Butwewanttogomuchfurtherthanthat.Wewanttohavebankstatementstobeimportedautomaticallyfromthebankeveryhour.Wewantpaymentordertobesentautomaticallytoyourbank,checkstobeprintedautomatically,Fabienstartednegotiationwithexternalwebservicesinsomecountriestoautomatetheseinterfaceswithbanks.Whatdoeseverymanagerdowhenhearrivesattheoffice?Hewantstocheckthepaymentreceivedontheday/yesterday.WewantOdootoallowthat!Arealtimevisibilityonyourcashandthepaymentofyoursuppliersinoneclick,ThiswillbethereasonwhypeoplewillloveOdooaccounting.Itwillevenbeinournewuseronboardingflow(seebelow)

    Reverse entries wizard Yearsago,amodulenamedaccount_reversalwascreatedbythecommunity.Itsgoalistoofferaneasywaytocreatetheexactoppositeaccountingentrythantheselectedone.https://www.odoo.com/apps/7.0/account_reversal/Wearewillingtointegratethemainfeatureofthemoduleaspartofthecorefeaturesoftheaccounting,butwebelieveitneeds

    somecodereview codeconversiontonewAPI someofthesatellitefeatures(e.g.checkboxtobereversed+filter)tobedropped

    Storno and Anglo-Saxon TheStornomodule(puttingnegativevaluesindebitand/orcreditwhenreversingajournalentry)shouldbeintegratedbydefault.

    41/55

    https://www.google.com/url?q=https%3A%2F%2Fwww.odoo.com%2Fapps%2F7.0%2Faccount_reversal%2F&sa=D&sntz=1&usg=AFQjCNGFyoeRkp7RnObl4ATwt-lswmFI8w
  • BothStornoandAngloSaxonshouldbeinseparatedmoduleANDtheymustbeactivatedbycompany.Thiswouldallowtohavemulticompaniesenvironment,somewithstornoaccounting,otherswithout.

    Modularity Thefollowingchangesshouldbedoneonmodules:

    mergeaccount&account_voucher(andremovealltheunnecessaryfeaturesinvoucher)

    putPythonCodefortaxcomputationandRatesinaseparatemodule:account_tax_advanced

    officializeaccount_storno

    Tests & Demo Data Tests and demo data currently rely on a dedicated test chart of account and taxes, which currently results in creation of duplicated Chart of Accounts, duplicated journals and so on. Those demo data pollute the demo instances and confuse people. The runbot is also hardly usable because of several localization modules installed. In order to clean the databases installed with demo data, and the runbot, we gonna do the following changes: the demo data and the test files will be located in the account module but they will only be instantiated and tested in localization module: they will simply be referred in l10n_*/__openerp__.py by

    demo: [../account/demo_file.xml] test: [../account/test/test_file.xml]

    When installing a l10n_* module, the system will check if there already exists a CoA for the users company. If not, it will directly generate the CoA from the installed templates, otherwise the template are just installed normally. In order to have the accounting tested using a random localization, the runbot will install only one random localization module (for the main company), skipping the other ones.

    42/55

  • Journal Entries Recording TODO:speconhowtorecordjournalentries.

    Send Invoices by Regular Mail Wedevelopedaninterfacewithaservicethatallowstosendinvoices/quotationsbyregularmailinallcountries.(invoicesareprintedinthelocalcountryanddeliveredbythepost.Itcostslessthan$1perlettertosend).WeusetheservicesofDocsawayandhaveanagreementwiththemtoputtheOdoologoonthefrontletter.

    TODO:improvethismockup:SettingslikeInk,PaperWeight,currency,balancecanbeintheSettings.(unlessthebalanceisnotenoughthenweshouldhaveamessage)

    43/55

  • So,youdontneedtoprintinvoices,puttheminenvelopandpostthem.Justsendthembypostinoneclick.Thewizardworksonasingleinvoicebutalsoallowtosendabatchofinvoicesatonce.

    Add Management Reports

    44/55

  • Improvements of existing features

    Access rights Renameaccessrights:Billing,Accountant,Adviser.

    Reconciliation

    WIP:https://github.com/odoodev/odoo/tree/mastermanualreconciliationama/inthewindowofmanualcounterpart,addageartosaveasatemplateandanothertomanagetemplates.Ifthelistofbuttonistoobig,haveabuttonmoreinsteadofgoinginseverallinesSincebankstatementdonotusetheaccount.voucherobjectanymore,itcanbesimplifiedalot.AccountvouchersareusedforSalesReceiptandpurchaseReceiptonly.

    45/55

    https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fodoo-dev%2Fodoo%2Ftree%2Fmaster-manual-reconciliation-ama%2F&sa=D&sntz=1&usg=AFQjCNE0Wc2X0hLUvXdM-x16SniAslvQnQ
  • Bank Statement Reconciliation

    Tocheck:

    DontrememberifwefinishedtheReconcileWithExistingEntriesfeature(iftheguyusedthePayInvoicebutton.Usefulforcheckshandling(orcreditcardpayments).Somecountriesprefertodothatratherthanusinganintermediateaccounts.

    Bank Statement Import

    46/55

  • WIP:https://github.com/odoodev/odoo/tree/mastermanualreconciliationama/Todo:

    Improvethebinaryfieldwidget(uglyandunusable) ReconcilethefirstsentriesandtherestinthebackgroundstonotlocktheUI inthenotificationwindow:

    addlinkstogoonthelistofitems donotclosebyclickingonthenotificationbutonlyifweclickonacross

    Forinformation,thestandardflowofreconcilestatementsintheU.S.:Checktheuserflow.Todo:checkthatthedashboard(journalkanban)displaytheseinformation.Currentlysupportedformat:CODA,QIF,OFX.MakeitworkfortheCSVimporttoo.(usingtheCSVimporttoolwithsometweakstocreatejournalentrieswhenimportingjournalitems).basedontheCSVimporttool.

    Createjournalentriesandlinkthem AutoassignCoAaccountsandpartnersaccordingtobankaccounts

    Todo:addstepbystepscreenshotsonhowtogetyourbankstatementfileaccordingtoyourbank.(likeslides)Weneedthisineverycountry.Callforcontributorswiththecommunity.(createadocumentofwhatwearelookingforweneedtodothefirstsonesforBelgium)

    47/55

    https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fodoo-dev%2Fodoo%2Ftree%2Fmaster-manual-reconciliation-ama%2F&sa=D&sntz=1&usg=AFQjCNE0Wc2X0hLUvXdM-x16SniAslvQnQhttp://www.google.com/url?q=http%3A%2F%2Fwww.vystarcu.org%2Fhome%2FfiFiles%2Fstatic%2Fimages%2Fbalance_chk_accnt.jpg&sa=D&sntz=1&usg=AFQjCNFcEnp1-oFfiLgVwqdsbkXO0AEbrg
  • IhavetestedaBelgiansmallSaaSBilling/BankInterfacesoftwareafewweeksago.Theydiditright(screenshotsofeverystepstogetyourcodafileineverybank)butIdontfinditanymore.

    Menu items Thenumberofmenuitemswilldrasticallybereducedthankstothedashboard.(kanbanviewofjournals)Secondaryfeatureswillbeavailablefromthedashboard.Themenustructureontheright:

    Accounting Dashboard JournalEntries

    Customers SaleInvoices SaleRefunds SalesReceiptshouldwekeepit? Customers

    Suppliers PurchaseInvoices PurchaseRefund PurchaseReceipts Suppliers

    Statements PaymentFollowup>CustomerStatements ...

    PeriodicalProcessing Reconciliation

    Manual Automatic

    Reports ProfitAndLoss BalanceSheet AgedReceivable Taxes AllReports(likeinXeroifareportisfavourited,itsaddedinthismenu)

    Configuration Accounting

    FiscalYearThisformcouldbeusedtocloseaperiod/fiscalyear Accounts Journals

    48/55

  • BankAccountsintechnicalfeatureforimportonly Modelsmodelofentriesshouldbedefinedwhereweuseit.

    Taxes TaxesDefinition FiscalPositions

    FollowUps PaymentTerms Followuplevels

    TheAllreportsmenushowsallreportsandyoucanfavouritesometomakethemappearinthemenu.

    TODO:mockupforthisfeature(andhowwehandlecustomreportdefinition)

    49/55

  • Journal form view

    Todo:improvethismockup:

    CodeShortNameonReports/defaultprefixforsequence ExplaintheTypefield(isthereatooltip?) Explainthelinkbetweenjournalandpaymenttype,itsnotusual.

    Account form view

    50/55

  • Assets Theassetcategoryshouldappearconditionallyaccordingtotheproduct.(addamany2oneassetcategoryonproduct.templateobject)Whensettinganassetcategory,theaccountshouldchangeaccordinglyontheinvoice(andwhenusedinthePO).Onanasset,addawaytodisengagetheasset(e.g.yousoldit).

    Fiscal position form view addscreenshot

    51/55

  • Invoice Report

    Allowtodisplayshippingaddressoninvoices Whenafiscalpositionisset,weshoulddisplayarelatedtextontheinvoice(alaw

    requirementinsomecountriesforsomefiscalpositions) Allowtodisplaythesaledate(thatcanbedifferentfromtheinvoicedate)Someone

    saiditsmandatoryinFrance,butIamnotsureaboutit.tobevalidated.

    Remove All EDI stuff

    WeshouldremoveorreviewEDIstuff.(shouldwekeepit?)Isanyoneusingit?

    Bank Account form view

    TODO:

    AddaTypefield:IBAN,SavingsAccount,... Preloadthelistofbanks?

    52/55

  • Usability

    User On Boarding Flow Insummary,wehavetwoWOWeffectspossibleinjustafewstep:Scenario1:

    1. FreeTrial2. CreateInvoice3. SendbyPost(*)4. (receiveitinyourmailbox3daysafter)

    Scenario2:

    1. FreeTrial2. SyncWithBank(orImportabankStatement)3. Dataareallfilledandstuffconfigured:

    a. bankaccountcreatedb. bankcreatedasacontactc. bankjournalcreatedd. journalitemsavailable

    So,afterthefreetrial(orinstallationoftheDB),theuserarrivesinthekanbandashboardwithafewjournalcreated(sales,purchases,bank,cash).Weneedaprimarybuttononthesejournalsanddependingonthebuttonhechoose,hegoestheScenario1orScenario2.(*)Itmaynotbeclearfortheuserwhatsthevalueofsendinginvoicesbypostautomatically.ItwouldbegoodtoaddaTIPforthefirsttime,explainingwhatthewizardwilldoandwhyitsgreat!Inourcompany,theaccountantsendinvoicesonceaweek(becauseshepreferstoprintandpostbybatches).Thismeanswecandeliverinvoices4daysfasteronaverage(3.5duetothebatchand1duetointernationalletterswhenit'sprinted+postedintherightcountrydirectly)Sinceouraveragecustomerpaymenttermis30days,bysendinginvoices4daysearlier,wecanhave13%ofourmonthlyturnoverinourbankaccount.TODO:Weneedtodoanonboardingflowlikethisone:https://fr.slideshare.net/secret/upjRZ9TgRHnSFX

    53/55

    https://www.google.com/url?q=https%3A%2F%2Ffr.slideshare.net%2Fsecret%2FupjRZ9TgRHnSFX&sa=D&sntz=1&usg=AFQjCNHTR2Kjr117nTg-vL9W4Y1x1_tzYA
  • Planner TheplanneraimstoguidenewusersthroughtheinitialconfigurationofOdooasadaytodayaccountingsolution.Itsalsoanintroductiontothebasicprinciplesofaccountingforbeginners(asthereisaminimallevelofknowledgerequiredtousethemoduleefficiently)Mockup:http://qf6iua.axshare.com/accounting.html(workinprogress)

    54/55

    http://www.google.com/url?q=http%3A%2F%2Fqf6iua.axshare.com%2Faccounting.html&sa=D&sntz=1&usg=AFQjCNEqCKAGQ7VmZtzYV440bQcVeAu5Iw
  • Phase 2: localization

    switzerland: needoneextrafieldontheaccount.move.linetostorethebvrreference(orneedawaytocreatejournalentrieswith"invoicebvr+asequence"...chosenonthepaymentterm?)(theydon'twantitonthegeneralledgerforexample...)=>addabooleanonpaymenttermline

    US: checkwrinting

    55/55