示例#1
0
        /// <summary>
        /// Saves all the parts of a Document from Portable document created online - ORG_TRX_Header, SYS_DOC_Header, SYS_DOC_Line, GLX_Header, GLX_Line and all movement and history
        /// </summary>
        /// <param name="connectionString">Connection string for the XPO datasource</param>
        /// <param name="userName">Username that created the document</param>
        /// <param name="jsonDoc">Portable document sent from web to be saved</param>
        /// <returns>Returns true if saved successfully.</returns>
        public static bool SaveDocument(string connectionString, string userName, string jsonDoc)
        {
            using (UnitOfWork uow = new UnitOfWork())
            {
                uow.ConnectionString = connectionString;
                uow.Connect();

                // Starts an explicit transaction.
                uow.ExplicitBeginTransaction();
                try
                {
                    PORT.Document document = (PORT.Document)JsonConvert.DeserializeObject(jsonDoc, typeof(PORT.Document));
                    document.documentheader.documentType = (byte)DAL.Enums.SYS_DOC_Type.SalesOrder;
                    DAL.Datamodel.SEC_User sec_user = uow.Query <DAL.Datamodel.SEC_User>().Where(u => u.Username == userName).FirstOrDefault();

                    DAL.Datamodel.SYS_Tracking sysTracking = Core.SYS.SYS_TrackingProvider.New(uow, "WEB");
                    uow.CommitChanges();

                    DAL.Datamodel.ORG_TRX_Header orgHeader = Web.ORG.ORG_TRX_HeaderProvider.Create(uow, sec_user, sysTracking, document.documentheader.documentType, document);

                    orgHeader.HeaderId = Web.SYS.SYS_DOC_HeaderProvider.New(uow, sec_user, sysTracking, document);

                    uow.CommitChanges();
                    orgHeader.HeaderId.DocumentNumber = uow.Query <DAL.Datamodel.SYS_DOC_Header>().Where(d => d.TypeId == (DAL.Enums.SYS_DOC_Type)document.documentheader.documentType).Max(d => d.DocumentNumber) + 1;
                    sysTracking.Initiator             = String.Format("WEB - {0} {1}", "Sales Order", orgHeader.HeaderId.DocumentNumber.ToString());
                    uow.CommitChanges();

                    //CREATE TAX INVOICE FROM SALES ORDER
                    //////////////////////////////////////////////////
                    document.documentheader.documentType = (byte)DAL.Enums.SYS_DOC_Type.TAXInvoice;
                    DAL.Datamodel.ORG_TRX_Header orgHeaderInvoice = Web.ORG.ORG_TRX_HeaderProvider.Create(uow, sec_user, sysTracking, document.documentheader.documentType, document);

                    orgHeaderInvoice.HeaderId = Web.SYS.SYS_DOC_HeaderProvider.New(uow, sec_user, sysTracking, document);

                    uow.CommitChanges();
                    orgHeaderInvoice.HeaderId.DocumentNumber = uow.Query <DAL.Datamodel.SYS_DOC_Header>().Where(d => d.TypeId == (DAL.Enums.SYS_DOC_Type)document.documentheader.documentType).Max(d => d.DocumentNumber) + 1;
                    uow.CommitChanges();
                    //////////////////////////////////////////////////

                    Core.ORG.ORG_CompanyProvider.UpdateCompanyHistory(uow, orgHeaderInvoice.CompanyId.Id, orgHeaderInvoice.HeaderId.SYS_DOC_Lines.Sum(l => l.Total));

                    DAL.Datamodel.GLX_Header glx_Header = Core.GLX.GLX_HeaderProvider.NewInvoice(uow, orgHeaderInvoice);

                    Core.GLX.GLX_HeaderProvider.UpdateLedgerAccountBalance(uow, glx_Header);

                    uow.CommitChanges();

                    uow.ExplicitCommitTransaction();
                }
                catch
                {
                    uow.ExplicitRollbackTransaction();
                    throw;
                }
            }
            return(true);
        }
示例#2
0
        /// <summary>
        /// Creates a new ORG_TRX_Header from a Portable Document created online.
        /// </summary>
        /// <param name="uow">Unit of Work to create the Header on</param>
        /// <param name="createdBy">The user that created the Document</param>
        /// <param name="sysTracking">The tracking number for the Header</param>
        /// <param name="documentType">The Document type you want to create a header for</param>
        /// <param name="document">The Portable document to create the header from</param>
        /// <returns>A new ORG_TRX_Header created from a Portable document</returns>
        internal static DAL.Datamodel.ORG_TRX_Header Create(UnitOfWork uow, DAL.Datamodel.SEC_User createdBy, DAL.Datamodel.SYS_Tracking sysTracking, byte documentType, PORT.Document document)
        {
            DAL.Datamodel.ORG_TRX_Header org_trx_header = new DAL.Datamodel.ORG_TRX_Header(uow);

            org_trx_header.BillingAddressLine1 = document.billingAddressLine1;
            org_trx_header.BillingAddressLine2 = document.billingAddressLine2;
            org_trx_header.BillingAddressLine3 = document.billingAddressLine3;
            org_trx_header.BillingAddressLine4 = document.billingAddressLine4;
            org_trx_header.BillingAddressCode = document.billingAddressCode;
            org_trx_header.DatePosted = document.datePosted;
            org_trx_header.ReferenceShort1 = document.referenceShort1;
            org_trx_header.ReferenceShort2 = document.referenceShort2;
            org_trx_header.ReferenceShort3 = document.referenceShort3;
            org_trx_header.ShippingTypeId = DAL.Enums.ORG_TRX_ShippingType.Normal;
            org_trx_header.CompanyId = uow.Query<DAL.Datamodel.ORG_Company>().Where(c => c.EntityId.EntityId.Id == document.companyId).FirstOrDefault();
            org_trx_header.CreatedBy = createdBy.PersonId;

            return org_trx_header;
        }
示例#3
0
        internal static DataAccessLayer.XPO.Datamodel.GLX_Header NewInvoice(UnitOfWork uow, DAL.Datamodel.ORG_TRX_Header orgHeaderInvoice)
        {
            DAL.Datamodel.GLX_Header glx_invoice_header = new DAL.Datamodel.GLX_Header(uow);

            glx_invoice_header.CreatedBy     = orgHeaderInvoice.CreatedBy;
            glx_invoice_header.Date          = orgHeaderInvoice.DatePosted;
            glx_invoice_header.Description   = string.Format("Debtor Sale to Acc #: {0}.", orgHeaderInvoice.CompanyId.EntityId.EntityId.CodeSub);
            glx_invoice_header.PeriodId      = uow.Query <DAL.Datamodel.SYS_Period>().Where(p => p.StartDate <= orgHeaderInvoice.DatePosted && p.EndDate >= orgHeaderInvoice.DatePosted).FirstOrDefault();
            glx_invoice_header.PostedDate    = orgHeaderInvoice.DatePosted;
            glx_invoice_header.JournalTypeId = DAL.Enums.GLX_JournalType.Invoice;
            glx_invoice_header.StatusId      = DAL.Enums.SYS_Status.Posted;
            glx_invoice_header.TrackId       = orgHeaderInvoice.HeaderId.TrackId;
            glx_invoice_header.ReferenceId   = orgHeaderInvoice.Id;
            glx_invoice_header.Reference     = String.Format("Doc #: {0}", orgHeaderInvoice.HeaderId.DocumentNumber);

            DAL.Datamodel.GLX_SiteAccount debtorsControl       = uow.Query <DAL.Datamodel.GLX_SiteAccount>().Where(e => e.TypeId == DAL.Enums.GLX_SystemAccountType.Debtors).FirstOrDefault();
            DAL.Datamodel.SYS_Entity      debtorsControlEntity = debtorsControl.EntityId;

            // DEBTORS ENTRY
            DAL.Datamodel.GLX_Line glx_line_debtor = new DAL.Datamodel.GLX_Line(uow);
            glx_line_debtor.EntityId     =
                glx_line_debtor.EntityId = uow.Query <DAL.Datamodel.SYS_Entity>().Where(e => e.CodeSub == orgHeaderInvoice.CompanyId.EntityId.EntityId.CodeSub && e.CodeMain == debtorsControlEntity.CodeMain && e.TypeId == DAL.Enums.SYS_Type.Account).FirstOrDefault();
            //CURRENT
            glx_line_debtor.AgingId = uow.Query <DAL.Datamodel.GLX_Aging>().Where(n => n.Id == (byte)1).FirstOrDefault();
            glx_line_debtor.Amount  = orgHeaderInvoice.HeaderId.SYS_DOC_Lines.Sum(l => l.Total + l.TotalTax);
            //glx_line_debtor.CenterId = BL.GLX.GLX_Account.LoadByEntityId(glx_line_debtor.EntityId, dataContext).CenterId;
            glx_invoice_header.GLX_Lines.Add(glx_line_debtor);

            // SALES ENTRY WITHOUT TAX
            DAL.Datamodel.GLX_Line glx_line_sales = new DAL.Datamodel.GLX_Line(uow);
            glx_line_sales.EntityId = uow.Query <DAL.Datamodel.GLX_SiteAccount>().Where(e => e.TypeId == DAL.Enums.GLX_SystemAccountType.Sales).FirstOrDefault().EntityId;
            //CURRENT
            glx_line_sales.AgingId = uow.Query <DAL.Datamodel.GLX_Aging>().Where(n => n.Id == (byte)1).FirstOrDefault();
            glx_line_sales.Amount  = -(orgHeaderInvoice.HeaderId.SYS_DOC_Lines.Sum(l => l.Total));
            //glx_line_sales.CenterId = BL.GLX.GLX_Account.LoadByEntityId(glx_line_sales.EntityId, dataContext).CenterId;
            glx_invoice_header.GLX_Lines.Add(glx_line_sales);

            // TAX ENTRY
            DAL.Datamodel.GLX_Line glx_line_vat = new DAL.Datamodel.GLX_Line(uow);
            glx_line_vat.EntityId = uow.Query <DAL.Datamodel.GLX_SiteAccount>().Where(e => e.TypeId == DAL.Enums.GLX_SystemAccountType.VatOutput).FirstOrDefault().EntityId;
            //CURRENT
            glx_line_vat.AgingId = uow.Query <DAL.Datamodel.GLX_Aging>().Where(n => n.Id == (byte)1).FirstOrDefault();
            glx_line_vat.Amount  = -(orgHeaderInvoice.HeaderId.SYS_DOC_Lines.Sum(l => l.TotalTax));
            //glx_line_vat.CenterId = BL.GLX.GLX_Account.LoadByEntityId(glx_line_vat.EntityId, dataContext).CenterId;
            glx_invoice_header.GLX_Lines.Add(glx_line_vat);

            //SALES & COS
            foreach (DAL.Datamodel.SYS_DOC_Line line in orgHeaderInvoice.HeaderId.SYS_DOC_Lines)
            {
                DAL.Datamodel.GLX_Line glx_line_Account = new DAL.Datamodel.GLX_Line(uow);
                glx_line_Account.EntityId = line.ItemId;
                //CURRENT
                glx_line_Account.AgingId = uow.Query <DAL.Datamodel.GLX_Aging>().Where(n => n.Id == (byte)1).FirstOrDefault();
                glx_line_Account.Amount  = -line.Total;
                //glx_line_Account.CenterId = BL.GLX.GLX_Account.LoadByEntityId(glx_line_Account.EntityId, dataContext).CenterId;
                glx_invoice_header.GLX_Lines.Add(glx_line_Account);

                //Add the contra entry for all other lines that are accounts Should be COS
                DAL.Datamodel.GLX_Line glx_line_contra_cost_of_sales = new DAL.Datamodel.GLX_Line(uow);
                glx_line_contra_cost_of_sales.EntityId = uow.Query <DAL.Datamodel.GLX_SiteAccount>().Where(e => e.TypeId == DAL.Enums.GLX_SystemAccountType.CostofSales).FirstOrDefault().EntityId;
                //CURRENT
                glx_line_contra_cost_of_sales.AgingId = uow.Query <DAL.Datamodel.GLX_Aging>().Where(n => n.Id == (byte)1).FirstOrDefault();
                glx_line_contra_cost_of_sales.Amount  = line.Total;
                //glx_line_contra_cost_of_sales.CenterId = BL.GLX.GLX_Account.LoadByEntityId(glx_line_contra_cost_of_sales.EntityId, dataContext).CenterId;
                glx_invoice_header.GLX_Lines.Add(glx_line_contra_cost_of_sales);
            }

            InsertProfitDistributionEntries(uow, glx_invoice_header);

            return(glx_invoice_header);
        }