/// <summary> /// Saves the business object. /// </summary> /// <param name="document"><see cref="CommercialDocument"/> to save.</param> /// <returns>Xml containing result of oper</returns> public XDocument SaveBusinessObject(InventorySheet sheet) { DictionaryMapper.Instance.CheckForChanges(); //load alternate version if (!sheet.IsNew) { IBusinessObject alternateBusinessObject = this.mapper.LoadBusinessObject(sheet.BOType, sheet.Id.Value); sheet.SetAlternateVersion(alternateBusinessObject); } //update status sheet.UpdateStatus(true); if (sheet.AlternateVersion != null) { sheet.AlternateVersion.UpdateStatus(false); } //validate sheet.Validate(); if (sheet.DocumentStatus == DocumentStatus.Canceled) { foreach (var line in sheet.Lines) //jak anulujemy arkusz to zerujemy direction na pozycjach { line.Direction = 0; } } //update status sheet.UpdateStatus(true); if (sheet.AlternateVersion != null) { sheet.AlternateVersion.UpdateStatus(false); } SqlConnectionManager.Instance.BeginTransaction(); try { DictionaryMapper.Instance.CheckForChanges(); this.mapper.CheckBusinessObjectVersion(sheet); this.ProcessInventoryHeaderOperations(sheet); //Make operations list XDocument operations = XDocument.Parse("<root/>"); sheet.SaveChanges(operations); if (sheet.AlternateVersion != null) { sheet.AlternateVersion.SaveChanges(operations); } if (operations.Root.HasElements) { this.mapper.ExecuteOperations(operations); //this.mapper.CreateCommunicationXml(sheet); //this.mapper.UpdateDictionaryIndex(sheet); } if (!sheet.SkipItemsUnblock && //jezeli nie mamy pominac odblokowywania bo np. dokument inwentaryzacji to zrobi za nas sheet.Lines.Children.Where(l => l.Direction == 0 && (l.IsNew || ((InventorySheetLine)l.AlternateVersion).Direction > 0)).FirstOrDefault() != null) //jezeli jakas linia zostala anulowana { itemMapper.UnblockItems(); } Coordinator.LogSaveBusinessObjectOperation(); operations = XDocument.Parse("<root/>"); if (operations.Root.HasElements) { this.mapper.ExecuteOperations(operations); } XDocument returnXml = XDocument.Parse(String.Format(CultureInfo.InvariantCulture, "<root><id>{0}</id></root>", sheet.Id.ToUpperString())); if (this.coordinator.CanCommitTransaction) { if (!ConfigurationMapper.Instance.ForceRollbackTransaction) { SqlConnectionManager.Instance.CommitTransaction(); } else { SqlConnectionManager.Instance.RollbackTransaction(); } } return(returnXml); } catch (SqlException sqle) { RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:76"); Coordinator.ProcessSqlException(sqle, sheet.BOType, this.coordinator.CanCommitTransaction); throw; } catch (Exception) { RoboFramework.Tools.RandomLogHelper.GetLog().Debug("FractusRefactorTraceCatch:77"); if (this.coordinator.CanCommitTransaction) { SqlConnectionManager.Instance.RollbackTransaction(); } throw; } }