Skip to main content

Managerul de magazin recepționează factura

Când Managerul de magazin inregistrează o Factură de intrare si produsul este Marfa, Sistemul actualizează prețul furnizorului și îl setează ca furnizor principal pentru marfa recepționată.
Când Managerul de magazin înregistrează o linie de intrare și cantitatea e mai mare ca 0, Sistemul șterge comenzile puse pentru produsul respectiv.

Managerul receptioneaza eFactura

Povestea

Sistemul descarca facturile primite de pe ANAF. Managerul incarca eFacturile de pe o anumita perioada, apoi selecteaza o factura care nu a fost receptionata. Sistemul gaseste partenerul dupa CUI si il selecteaza. Managerul face receptia cu unul din modurile:

  1. Receptioneaza. Sistemul deschide fereastra Manager -> Receptii si precompleteaza campurile cu datele de pe factura, apoi deschide dialogul Adauga si precompleteaza campurile cu datele de la prima linie de pe factura. Dupa ce Managerul salveaza linia, Sistemul actualizeaza codul furnizorului pentru produsul respectiv, marcheaza linia de pe eFactura ca receptionata si continua cu urmatoarele linii de pe factura. Dupa ce ultima linie a fost receptionata, Sistemul marcheaza eFactura ca receptionata.
  2. Fara linii. Sistemul deschide fereastra Urmarire Parteneri, selecteaza partenerul de pe factura si modul CUMPARARE, apoi deschide Adauga Document si precompleteaza campurile. Dupa ce Managerul salveaza factura, Sistemul marcheaza eFactura ca receptionata.
  3. Doar marcheaza. Sistemul marcheza eFactura ca receptionata.

Data mapping

A received ANAF eInvoice is stored as:

moqui.service.message.SystemMessage

  • systemMessageId: AnafReceivedMessage.id
  • systemMessageTypeId: ANAFReceivedInvoice
  • statusId: SmsgReceived
  • isOutgoing: N
  • initDate: now
  • processedDate: confirmed date
  • messageText: rawXml
  • senderId: AccountingSupplierParty.Party.PartyTaxScheme.CompanyID
  • receiverId: AccountingCustomerParty.Party.PartyTaxScheme.CompanyID
  • messageId: cbc:ID(invoice number)
  • messageDate: IssueDate
  • docType: "Invoice" or "CreditNote"
  • docSubType: InvoiceTypeCode or CreditNoteTypeCode
  • docControl: LegalMonetaryTotal.TaxInclusiveAmount.value

moqui.service.message.SystemMessageType

  • systemMessageTypeId: ANAFReceivedInvoice
  • description: "Invoice received through a message from ANAF eFactura"

mantle.account.invoice.InvoiceSystemMessage

  • invoiceId: AccountingDocument.id
  • systemMessageId: AnafReceivedMessage.id

And the invoice lines are split into one message each:

moqui.service.message.SystemMessage

  • systemMessageId: AnafReceivedMessage.id+"_"+InvoiceLine.id
  • systemMessageTypeId: ANAFReceivedInvoiceLine
  • statusId: SmsgReceived
  • isOutgoing: N
  • initDate: now
  • processedDate: confirmed date
  • parentMessageId: AnafReceivedMessage.id
  • messageText: InvoiceLineXml

moqui.service.message.SystemMessageType

  • systemMessageTypeId: ANAFReceivedInvoiceLine
  • description: "Invoice line split from an ANAF eInvoice"

Data statements

  • A received(posted in the books) ANAF eInvoice is SystemMessage with statusId=SmsgConfirmed.
  • A received ANAF eInvoice line is a SystemMessage with statusId=SmsgConfirmed

Service data mapping

Managerul incarca eFacturile de pe o anumita perioada

Managerul interogheaza Moqui pe o perioada intre from si to.

Moqui interogheaza cloud-anaf-connector la /invoices/search/between (from, to). Cloud-anaf-connector returneaza List<ReceivedInvoice>. Pentru fiecare ReceivedInvoice.id=systemMessageId care nu exista Moqui creeaza un SystemMessage. Moqui consuma SystemMessages noi.

Moqui returneaza Managerului efacturile intre from si to.

find#AnafInvoices

SystemMessage SM
JOIN InvoiceSystemMessage ISM on systemMessageId
WHERE SM.systemMessageTypeId=ANAFReceivedInvoice AND SM.messageDate between(from, to)

IN

  • start: start
  • end: end

OUT

  • id: SM.systemMessageId
  • senderId: SM.senderId
  • senderName: AccountingSupplierParty.Party.PartyLegalEntity.RegistrationName
  • issueDate: SM.messageDate
  • invoiceNumber: SM.messageId
  • invoiceTotal: LegalMonetaryTotal.TaxInclusiveAmount.value
  • taxTotal: TaxTotal.TaxAmount.value
  • taxExclusiveAmount: LegalMonetaryTotal.TaxExclusiveAmount.value
  • invoiceId: ISM.invoiceId
  • statusId: SM.statusId
  • rawXml: messageText

find#AnafInvoiceLines

SystemMessage SML WHERE SML.systemMessageTypeId=ANAFReceivedInvoiceLine AND SML.parentMessageId=systemMessageId

IN

  • systemMessageId: systemMessageId

OUT

  • id: SML.systemMessageId
  • lineId: ID
  • itemId: Item.SellersItemIdentification.ID
  • name: Item.Name + Item.Description
  • price: Price.PriceAmount
  • priceCurrency: Price.PriceAmount(currencyID)
  • quantity: InvoicedQuantity or CreditedQuantity
  • uomUNECERec20ToDisplay(InvoicedQuantity(unitCode) or CreditedQuantity(unitCode))
  • total: LineExtensionAmount
  • totalCurrency: LineExtensionAmount(currencyID)
  • statusId: SML.statusId

Screen data mapping

Table find#anafInvoices
id id
cif emitent senderId
nume emitent

senderName

data issueDate
numar invoiceNumber
ValCuTVA invoiceTotal
id factura invoiceId
receptionat true if statusId=SmsgConfirmed else false
Receptie popup selected AnafInvoice AI
Partener Partner P WHERE P.codFiscal=AI.senderId
Factura AI.invoiceNumber
Data AI.issueDate
ValFaraTVA AI.taxExclusiveAmount
ValTVA AI.taxTotal
ValCuTVA AI.invoiceTotal
lines summary

foreach find#AnafInvoiceLines IL

IL.lineId IL.name IL.price IL.priceCurrency X IL.quantity uom = IL.total IL.totalCurrency