Esempio n. 1
0
        public Error CopyTempToSalesOrderHeader(int salesOrderHeaderTempId, UserModel user, string lockGuid)
        {
            var error            = new Error();
            SalesOrderHeader soh = null;

            var soht = db.FindSalesOrderHeaderTemp(salesOrderHeaderTempId);

            if (soht == null)
            {
                error.SetError(EvolutionResources.errRecordError, "OrderNumber", "SalesOrderHeaderTemp", salesOrderHeaderTempId.ToString());
            }
            else
            {
                if (soht.OriginalRowId != null && soht.OriginalRowId != 0)
                {
                    // Updating
                    if (!db.IsLockStillValid(typeof(SalesOrderHeader).ToString(), soht.OriginalRowId.Value, lockGuid))
                    {
                        error.SetError(EvolutionResources.errRecordChangedByAnotherUser, "OrderNumber");
                    }
                    else
                    {
                        SalesOrderHeader before = null;

                        soh = db.FindSalesOrderHeader(soht.OriginalRowId.Value);
                        if (soh != null)
                        {
                            // Found, so update
                            before = Mapper.Map <SalesOrderHeader, SalesOrderHeader>(soh);

                            Mapper.Map <SalesOrderHeaderTemp, SalesOrderHeader>(soht, soh);
                            soh.Id = soht.OriginalRowId.Value;
                        }
                        else
                        {
                            // Not found, so treat as new
                            soh    = Mapper.Map <SalesOrderHeaderTemp, SalesOrderHeader>(soht);
                            soh.Id = 0;
                        }
                        db.InsertOrUpdateSalesOrderHeader(soh);
                        error.Id = soh.Id;

                        AuditService.LogChanges(typeof(SalesOrderHeader).ToString(), BusinessArea.SalesOrderDetails, user, before, soh);
                    }
                }
                else
                {
                    // New record
                    soh    = Mapper.Map <SalesOrderHeaderTemp, SalesOrderHeader>(soht);
                    soh.Id = 0;
                    db.InsertOrUpdateSalesOrderHeader(soh);
                    error.Id = soh.Id;

                    AuditService.LogChanges(typeof(SalesOrderHeader).ToString(), BusinessArea.SalesOrderDetails, user, null, soh);
                }

                // Now copy the details from temp to live tables
                if (!error.IsError)
                {
                    db.CopyTempToSale(soht.CompanyId, soht.Id, soh.Id);

                    // And perform allocations
                    AllocationService.AllocateOnSalesOrderSave(Mapper.Map <SalesOrderHeader, SalesOrderHeaderModel>(soh));
                }
            }
            return(error);
        }