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