Пример #1
0
        private void ValidateServicesLines(CommercialDocument document)
        {
            this.mapper.AddItemsToItemTypesCache(document);

            //Zamówienie sprzedazowe nie może posiadać więcej niż jednej pozycji zawierającej usługę na ilość 1. Ponadto pozycja ta nie może generować kosztu.
            //pomijamy te linie, które posiadają nieaktualną stawkę VAT - istotne dla FVR gdy zmieniają się obowiązujace stawki VAT
            IEnumerable <CommercialDocumentLine> relevantServicesLines =
                document.Lines.Where(line =>
                                     !DictionaryMapper.Instance.GetItemType(SessionManager.VolatileElements.ItemTypesCache[line.ItemId]).IsWarehouseStorable);
            int servicesSalesLinesCount = 0;

            foreach (CommercialDocumentLine line in relevantServicesLines)
            {
                string sogdOption = SalesOrderGenerateDocumentOption.GetOption(line);
                if (SalesOrderGenerateDocumentOption.IsSales(sogdOption) && line.Quantity <= 1)
                {
                    if (DictionaryMapper.Instance.GetVatRate(line.VatRateId).IsEventDateValid(document.EventDate))
                    {
                        servicesSalesLinesCount++;
                    }
                }
                else
                {
                    throw new ClientException(ClientExceptionId.SalesOrderMoreThanOneServiceLineError);
                }
            }
            if (servicesSalesLinesCount > 1)
            {
                throw new ClientException(ClientExceptionId.SalesOrderMoreThanOneServiceLineError);
            }
        }
Пример #2
0
        /// <summary>
        /// Calculates vat table and sets document value as sum of all lines (without round).
        /// </summary>
        private void CalculateVatTable()
        {
            //store previous vtEntries
            //dictionary vatRateId - vtEntry (previous)
            Dictionary <Guid, CommercialDocumentVatTableEntry> previousVatTableEntries = new Dictionary <Guid, CommercialDocumentVatTableEntry>();

            foreach (CommercialDocumentVatTableEntry vtEntry in this.VatTableEntries.Children)
            {
                previousVatTableEntries.Add(vtEntry.VatRateId, vtEntry);
            }

            this.VatTableEntries.RemoveAll();

            this.NetValue   = 0;
            this.GrossValue = 0;
            this.VatValue   = 0;

            //generate new vtEntry or update an existing one
            foreach (CommercialDocumentLine line in this.Lines.Children)
            {
                #region Skip Sales Order cost positions
                string salesOrderGDO = SalesOrderGenerateDocumentOption.TryGetOption(line);
                if (salesOrderGDO != null && SalesOrderGenerateDocumentOption.IsCost(salesOrderGDO))
                {
                    continue;                    //
                }
                #endregion

                var vtEntries = from entry in this.VatTableEntries.Children
                                where entry.VatRateId == line.VatRateId
                                select entry;

                CommercialDocumentVatTableEntry vtEntry = null;

                if (vtEntries.Count() == 1) //update the entry
                {
                    vtEntry = vtEntries.ElementAt(0);
                }
                else //generate new entry
                {
                    vtEntry           = this.VatTableEntries.CreateNew();
                    vtEntry.VatRateId = line.VatRateId;

                    if (previousVatTableEntries.ContainsKey(line.VatRateId)) //get id and version from the previous one
                    {
                        CommercialDocumentVatTableEntry previousVtEntry = previousVatTableEntries[line.VatRateId];
                        vtEntry.Id      = previousVtEntry.Id;
                        vtEntry.Version = previousVtEntry.Version;

                        if (previousVtEntry.AlternateVersion != null)
                        {
                            vtEntry.SetAlternateVersion(previousVtEntry.AlternateVersion);
                        }
                    }
                }

                vtEntry.NetValue   += line.NetValue;
                vtEntry.GrossValue += line.GrossValue;
                vtEntry.VatValue   += line.VatValue;

                this.NetValue   += line.NetValue;
                this.GrossValue += line.GrossValue;
                this.VatValue   += line.VatValue;
            }
        }