Exemplo n.º 1
0
        private static void CalculateHeaderAndVatTableAfterCorrection(CommercialDocument document)
        {
            CommercialDocumentLine firstLine = document.Lines.Children.First();

            if (firstLine.CorrectedLine != null)
            {
                CommercialDocument previousDoc = (CommercialDocument)firstLine.CorrectedLine.Parent;
                CommercialCorrectiveDocumentFactory.CalculateHeaderAndVatTableAfterCorrection(previousDoc);

                decimal netValue   = previousDoc.NetValue;
                decimal grossValue = previousDoc.GrossValue;
                decimal vatValue   = previousDoc.VatValue;

                if (previousDoc.IsSettlementDocument)
                {
                    netValue   = previousDoc.VatTableEntries.Where(ss => ss.NetValue > 0 && ss.GrossValue > 0 && ss.VatValue > 0).Sum(s => s.NetValue);
                    grossValue = previousDoc.VatTableEntries.Where(ss => ss.NetValue > 0 && ss.GrossValue > 0 && ss.VatValue > 0).Sum(s => s.GrossValue);
                    vatValue   = previousDoc.VatTableEntries.Where(ss => ss.NetValue > 0 && ss.GrossValue > 0 && ss.VatValue > 0).Sum(s => s.VatValue);
                }

                document.NetValue   += netValue;
                document.GrossValue += grossValue;
                document.VatValue   += vatValue;

                foreach (CommercialDocumentVatTableEntry vtEntry in previousDoc.VatTableEntries.Children)
                {
                    if (previousDoc.IsSettlementDocument && (vtEntry.NetValue < 0 || vtEntry.GrossValue < 0 || vtEntry.VatValue < 0))
                    {
                        continue;
                    }

                    CommercialDocumentVatTableEntry currentVtEntry = document.VatTableEntries.Children.Where(v => v.VatRateId == vtEntry.VatRateId).FirstOrDefault();

                    if (currentVtEntry != null)
                    {
                        currentVtEntry.GrossValue += vtEntry.GrossValue;
                        currentVtEntry.NetValue   += vtEntry.NetValue;
                        currentVtEntry.VatValue   += vtEntry.VatValue;
                    }
                }
            }
        }
Exemplo n.º 2
0
        private static void CreateNextCorrectiveDocument(CommercialDocument lastCorrectiveDoc, CommercialDocument destination)
        {
            destination.CorrectedDocument = lastCorrectiveDoc;

            //copy header
            destination.CalculationType    = lastCorrectiveDoc.CalculationType;
            destination.DocumentCurrencyId = lastCorrectiveDoc.DocumentCurrencyId;
            destination.GrossValue         = lastCorrectiveDoc.GrossValue;
            destination.NetValue           = lastCorrectiveDoc.NetValue;
            destination.SummationType      = lastCorrectiveDoc.SummationType;
            destination.VatValue           = lastCorrectiveDoc.VatValue;
            //Jednak event date powinien być podpowiadany jako bieżąca data
            destination.EventDate = SessionManager.VolatileElements.CurrentDateTime;            //lastCorrectiveDoc.EventDate;

            if (lastCorrectiveDoc.Contractor != null)
            {
                ContractorMapper contractorMapper = DependencyContainerManager.Container.Get <ContractorMapper>();
                Contractor       contractor       = (Contractor)contractorMapper.LoadBusinessObject(BusinessObjectType.CommercialDocument, lastCorrectiveDoc.Contractor.Id.Value);

                destination.Contractor          = contractor;
                destination.ContractorAddressId = lastCorrectiveDoc.ContractorAddressId;
            }

            //copy attributes if specified
            foreach (DocumentAttrValue attr in lastCorrectiveDoc.Attributes.Children)
            {
                if (attr.DocumentFieldName == DocumentFieldName.Attribute_SupplierDocumentDate ||
                    attr.DocumentFieldName == DocumentFieldName.Attribute_SupplierDocumentNumber)
                {
                    DocumentAttrValue dstAttr = destination.Attributes.CreateNew();
                    dstAttr.DocumentFieldName = attr.DocumentFieldName;
                    dstAttr.Value             = new XElement(attr.Value);
                }
            }

            //create vat tables
            foreach (CommercialDocumentVatTableEntry vtEntry in lastCorrectiveDoc.VatTableEntries.Children)
            {
                if (lastCorrectiveDoc.IsSettlementDocument && (vtEntry.GrossValue < 0 || vtEntry.NetValue < 0 || vtEntry.VatValue < 0))
                {
                    continue;
                }

                if (vtEntry.GrossValue != 0 || vtEntry.NetValue != 0 || vtEntry.VatValue != 0)
                {
                    CommercialDocumentVatTableEntry dstVtEntry = destination.VatTableEntries.CreateNew();

                    dstVtEntry.GrossValue = vtEntry.GrossValue;
                    dstVtEntry.NetValue   = vtEntry.NetValue;
                    dstVtEntry.VatValue   = vtEntry.VatValue;
                    dstVtEntry.VatRateId  = vtEntry.VatRateId;
                }
            }

            if (lastCorrectiveDoc.IsSettlementDocument)
            {
                destination.NetValue   = destination.VatTableEntries.Sum(s => s.NetValue);
                destination.GrossValue = destination.VatTableEntries.Sum(s => s.GrossValue);
                destination.VatValue   = destination.VatTableEntries.Sum(s => s.VatValue);
            }

            //create only these lines that werent corrected inside the same document
            var linesToCopy = from line in lastCorrectiveDoc.Lines.Children
                              where (lastCorrectiveDoc.Lines.Children.Where(w => w.CorrectedLine != null).Select(s => s.CorrectedLine.Id.Value)).Contains(line.Id.Value) == false
                              select line;

            foreach (CommercialDocumentLine srcLine in linesToCopy)
            {
                CommercialDocumentLine line = destination.Lines.CreateNew();
                line.CorrectedLine      = srcLine;
                line.DiscountGrossValue = srcLine.DiscountGrossValue;
                line.DiscountNetValue   = srcLine.DiscountNetValue;
                line.DiscountRate       = srcLine.DiscountRate;
                line.GrossPrice         = srcLine.GrossPrice;
                line.GrossValue         = srcLine.GrossValue;
                line.InitialGrossPrice  = srcLine.InitialGrossPrice;
                line.InitialGrossValue  = srcLine.InitialGrossValue;
                line.InitialNetPrice    = srcLine.InitialNetPrice;
                line.InitialNetValue    = srcLine.InitialNetValue;
                line.ItemId             = srcLine.ItemId;
                line.ItemName           = srcLine.ItemName;
                line.ItemVersion        = srcLine.ItemVersion;
                line.NetPrice           = srcLine.NetPrice;
                line.NetValue           = srcLine.NetValue;
                line.Quantity           = srcLine.Quantity;
                line.UnitId             = srcLine.UnitId;
                line.VatRateId          = srcLine.VatRateId;
                line.VatValue           = srcLine.VatValue;
                line.WarehouseId        = srcLine.WarehouseId;
                line.ItemCode           = srcLine.ItemCode;
                line.ItemTypeId         = srcLine.ItemTypeId;
            }
        }