using System; using System.Linq; using System.Data; using System.Data.SqlClient; namespace DatabaseImport.ISO { [Serializable] public class CustomerDetails //: ISerializableFile { // #region properties public string CustomerName { get; set; } = string.Empty; public string CustomerTestRefNumber { get; set; } = string.Empty; private string _projectRefNumber = "NOVALUE"; public string ProjectRefNumber { get => _projectRefNumber; set { if (value != string.Empty) { _projectRefNumber = value; } } } private string _customerOrderNumber = "NOVALUE"; public string CustomerOrderNumber { get => _customerOrderNumber; set { if (value != string.Empty) { _customerOrderNumber = value; } } } private string _customerCostUnit = "NOVALUE"; public string CustomerCostUnit { get => _customerCostUnit; set { if (value != string.Empty) { _customerCostUnit = value; } } } public bool LocalOnly { get; set; } = false; public string Name { get; set; } = ""; public DateTime LastModified { get; set; } public string LastModifiedBy { get; set; } public int Version { get; set; } = 1; // #endregion properties // #region constructor public CustomerDetails() { } // public CustomerDetails(string name, bool localOnly) { Name = name; LocalOnly = localOnly; } public CustomerDetails(DataRow dr) { Name = (string)dr["Name"]; CustomerName = (string)dr["CustomerName"]; CustomerTestRefNumber = (string)dr["CustomerTestRefNumber"]; ProjectRefNumber = (string)dr["ProjectRefNumber"]; CustomerOrderNumber = (string)dr["CustomerOrderNumber"]; CustomerCostUnit = (string)dr["CustomerCostUnit"]; LocalOnly = Convert.ToBoolean(dr["LocalOnly"]); LastModified = Convert.ToDateTime(dr["LastModified"]); LastModifiedBy = (string)dr["LastModifiedBy"]; Version = Convert.ToInt32(dr["Version"]); } public CustomerDetails(CustomerDetails copy) { Name = copy.Name; CustomerName = copy.CustomerName; CustomerTestRefNumber = copy.CustomerTestRefNumber; ProjectRefNumber = copy.ProjectRefNumber; CustomerOrderNumber = copy.CustomerOrderNumber; CustomerCostUnit = copy.CustomerCostUnit; LocalOnly = copy.LocalOnly; LastModified = copy.LastModified; LastModifiedBy = copy.LastModifiedBy; Version = copy.Version; } // #endregion constructor private enum Fields { Name, CustomerName, CustomerTestRefNumber, ProjectRefNumber, CustomerOrderNumber, CustomerCostUnit, LocalOnly, LastModified, LastModifiedBy, Version } public static CustomerDetails ReadXML(System.Xml.XmlElement root) { var c = new CustomerDetails(); foreach (var node in root.ChildNodes) { if (node is System.Xml.XmlElement) { ProcessXMLElement(node as System.Xml.XmlElement, ref c); } } return c; } private static void ProcessXMLElement(System.Xml.XmlElement node, ref CustomerDetails c) { if (!Enum.TryParse(node.Name, out Fields field)) return; switch (field) { case Fields.CustomerCostUnit: c.CustomerCostUnit = node.InnerText; break; case Fields.CustomerName: c.CustomerName = node.InnerText; break; case Fields.CustomerOrderNumber: c.CustomerOrderNumber = node.InnerText; break; case Fields.CustomerTestRefNumber: c.CustomerTestRefNumber = node.InnerText; break; case Fields.LastModified: c.LastModified = DateTime.Parse(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break; case Fields.LastModifiedBy: c.LastModifiedBy = node.InnerText; break; case Fields.LocalOnly: c.LocalOnly = bool.Parse(node.InnerText); break; case Fields.Name: c.Name = node.InnerText; break; case Fields.ProjectRefNumber: c.ProjectRefNumber = node.InnerText; break; case Fields.Version: c.Version = int.Parse(node.InnerText, System.Globalization.CultureInfo.InvariantCulture); break; default: throw new NotSupportedException("ISODll.CustomerDetails::ProcessXMLElement unsupported field: " + field.ToString()); } } public void WriteXML(ref System.Xml.XmlWriter writer) { writer.WriteStartElement("CustomerDetail"); var fields = Enum.GetValues(typeof(Fields)).Cast().ToArray(); foreach (var field in fields) { writer.WriteStartElement(field.ToString()); switch (field) { case Fields.CustomerCostUnit: writer.WriteString(CustomerCostUnit); break; case Fields.CustomerName: writer.WriteString(CustomerName); break; case Fields.CustomerOrderNumber: writer.WriteString(CustomerOrderNumber); break; case Fields.CustomerTestRefNumber: writer.WriteString(CustomerTestRefNumber); break; case Fields.LastModified: writer.WriteString(LastModified.ToString(System.Globalization.CultureInfo.InvariantCulture)); break; case Fields.LastModifiedBy: writer.WriteString(LastModifiedBy); break; case Fields.LocalOnly: writer.WriteString(LocalOnly.ToString()); break; case Fields.Name: writer.WriteString(Name); break; case Fields.ProjectRefNumber: writer.WriteString(ProjectRefNumber); break; case Fields.Version: writer.WriteString(Version.ToString(System.Globalization.CultureInfo.InvariantCulture)); break; default: throw new NotSupportedException("CustomerDetails::WriteXML unsupported field " + field.ToString()); } writer.WriteEndElement(); } writer.WriteEndElement(); } public static void DeleteCustomerDetails(string name = null) { try { var errorNumber = DTS.Common.Storage.DbOperations.CustomerDetailsDelete(name, out string errorMessage); if (errorNumber != 0) { //APILogger.Log("Failed to delete customer details", errorMessage); } } catch (Exception) { //APILogger.Log("Failed to delete customer details", ex); } } } }