/// <summary> /// Saves the Dataobject to the Database /// </summary> /// <param name="IndexColumn"></param> /// <param name="db"></param> public void SaveObject(Database db) { this.SetValue(LASTMODIFIED, DateTime.Now); this.SetValue(MODIFIEDBY, System.Environment.UserName); StringBuilder whereBuilder = new StringBuilder(); bool first = true; foreach (String column in PrimaryKeyColumns) { if (!first) { whereBuilder.Append(" AND "); } else { first = false; } whereBuilder.Append("`" + column + "` = "); if (data.IsColumnNumberDataType(column)) { whereBuilder.Append(data.getString(column)); } else { whereBuilder.Append("'" + data.getString(column) + "'"); } } if (newObject) { try { db.Insert(data.GetTableName(), data); newObject = false; updates = new Hashtable(); //Parse an array of UniqueID Columns StringBuilder description = new StringBuilder(); first = true; foreach (String column in PrimaryKeyColumns) { if (!first) { description.Append(" and "); } else { first = false; } description.Append(column + " is " + data.getString(column)); } //Submit an audit event AuditEvent auditEvent = new AuditEvent(db); auditEvent.EventDescription(data.GetTableName(), "New Object added, " + description.ToString()); auditEvent.SaveEvent(); } catch (Exception e) { Console.Write(e.StackTrace); throw new Exception("Database Error, Audit log failed.", e); } } else { StringBuilder setStr = new StringBuilder(); bool firstKey = true; foreach (Object key in updates.Keys) { if (!firstKey) { setStr.Append(","); } else { firstKey = false; } setStr.Append("`" + key.ToString() + "` = "); if (data.IsColumnNumberDataType(key.ToString())) { setStr.Append(updates[key].ToString()); } else if (updates[key].Equals(DBNull.Value)) { setStr.Append("NULL"); } else { setStr.Append("'" + updates[key].ToString() + "'"); } } DataSet check = db.Select(LASTMODIFIED + "," + MODIFIEDBY, data.GetTableName(), whereBuilder.ToString()); MessageBoxResult askBox; if (!check.getDateTime(LASTMODIFIED).Equals(data.getDateTime(LASTMODIFIED))) { askBox = MessageBox.Show(data.GetTableName() + " Object has already been modified by " + check.getString(MODIFIEDBY) + " since you have opened this object. Continue with operation?", "Consistency Error", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (askBox == MessageBoxResult.Yes) { db.Update(data.GetTableName(), setStr.ToString(), whereBuilder.ToString()); UpdateAuditEvent(db); data = db.Select("*", data.GetTableName(), whereBuilder.ToString()); } else { throw new Exception("Database Error, Object was out of sync. Reload Object."); } } else { db.Update(data.GetTableName(), setStr.ToString(), whereBuilder.ToString()); UpdateAuditEvent(db); } foreach (String column in PrimaryKeyColumns) { if (updates.ContainsKey(column)) { data.SetCellValue(0, column, updates[column]); } } updates.Clear(); } ReloadObject(); //data = db.Select("*", data.GetTableName(), whereBuilder.ToString()); }
private void cmdRemoveItem_Click(object sender, RoutedEventArgs e) { if (!isTransactionLocked) { MessageBoxResult res = MessageBox.Show("Are you sure you want to remove this item from the Transaction?", "Removal of Item", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (res == MessageBoxResult.Yes) { mTransactionItems.Remove(mTransactionItem.GetItemID()); InventoryItem item = mTransactionItem.GetInventoryItem(); if (item.getQuantity() > 0) { float newAvg = (item.getAverageCost() * item.getQuantity()) - (mTransactionItem.GetUnitPrice() * mTransactionItem.GetQuantity()); newAvg = newAvg / (item.getQuantity() - mTransactionItem.GetQuantity()); if (item.getQuantity() - mTransactionItem.GetQuantity() > 0) { item.setAverageCost(newAvg); item.setQuantity(item.getQuantity() - mTransactionItem.GetQuantity()); } else { item.setQuantity(0); } item.SaveObject(db); } db.Delete(InventoryTransactionItem.Table, InventoryTransactionItem.Fields.transactionID.ToString() + " = '" + mTransactionItem.GetTransactionID() + "' AND " + InventoryTransactionItem.Fields.itemID.ToString() + " = '" + mTransactionItem.GetItemID() + "'"); AuditEvent aEvent = new AuditEvent(db); aEvent.EventDescription(InventoryTransactionItem.Table, "Item " + mTransactionItem.GetItemID() + " with a quantity " + mTransactionItem.GetQuantity() + " has been removed from transaction " + mTransaction.GetTransactionID()); aEvent.SaveEvent(); isTransactionModified = true; LoadDateGrid(); ClearFields(); lockItemFields(); displayOrHideForm(); this.TabIsGainingFocus(); } } else { MessageBox.Show("Transaction is locked. Please unlock the transaction to modify it.", "Transaction Locked", MessageBoxButton.OK, MessageBoxImage.Warning); } }
private void UpdateAuditEvent(Database db) { StringBuilder eventDesc = new StringBuilder(); eventDesc.Append("Object was updated, "); Boolean first = true; foreach (Object key in updates.Keys) { if (!key.ToString().Equals(LASTMODIFIED) & !key.ToString().Equals(MODIFIEDBY)) { if (first) { first = false; } else { eventDesc.Append(", "); } eventDesc.Append(key.ToString() + " From \"" + data.getString(key.ToString()) + "\" to \"" + updates[key].ToString() + "\""); } } AuditEvent auditEvent = new AuditEvent(db); auditEvent.EventDescription(data.GetTableName(), eventDesc.ToString()); auditEvent.SaveEvent(); }