# 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 -&gt; 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&lt;ReceivedInvoice&gt;. 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
- **uom**: <span class="wikiexternallink">[UNECERec20ToDisplay](https://docs.peppol.eu/logistics/codelist/UNECERec20/)</span>(InvoicedQuantity(unitCode) or CreditedQuantity(unitCode))
- **total**: LineExtensionAmount
- **totalCurrency**: LineExtensionAmount(currencyID)
- **statusId**: SML.statusId

### <span style="color: inherit; font-family: inherit; font-size: max(23px, min(29px, 12.3333px + 1.38889vw));">Screen data mapping</span>

<table id="bkmrk-table-find%23anafinvoi"><tbody><tr><td>**Table**</td><td>find#anafInvoices</td></tr><tr><td>id</td><td>id</td></tr><tr><td>cif emitent</td><td>senderId</td></tr><tr><td>nume emitent</td><td>senderName

</td></tr><tr><td>data</td><td>issueDate</td></tr><tr><td>numar</td><td>invoiceNumber</td></tr><tr><td>ValCuTVA</td><td>invoiceTotal</td></tr><tr><td>id factura</td><td>invoiceId</td></tr><tr><td>receptionat</td><td>**true** if statusId=SmsgConfirmed else **false**</td></tr></tbody></table>

<table id="bkmrk-receptie-popup-selec"><tbody><tr><td>**Receptie popup**</td><td>selected AnafInvoice AI</td></tr><tr><td>Partener</td><td>Partner P WHERE P.codFiscal=AI.senderId</td></tr><tr><td>Factura</td><td>AI.invoiceNumber</td></tr><tr><td>Data</td><td>AI.issueDate</td></tr><tr><td>ValFaraTVA</td><td>AI.taxExclusiveAmount</td></tr><tr><td>ValTVA</td><td>AI.taxTotal</td></tr><tr><td>ValCuTVA</td><td>AI.invoiceTotal</td></tr><tr><td>lines summary</td><td>foreach find#AnafInvoiceLines IL

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

</td></tr></tbody></table>