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