using System; using System.Collections.Generic; using System.Xml.Serialization; using Common; using SharedDatabase.Resources; namespace SharedDatabase.Entities { public class OrderInfo : IParamsProvider { public virtual int Id { get; protected set; } public virtual string POName { get; set; } /// 0 public virtual sbyte POState { get; set; } /// 1 0=New, 1=Active, 2=Finished public virtual string Workflow { get; set; } /// 2 public virtual string TestProcedure { get; set; } /// 3 public virtual string VariantCode { get; set; } /// 4 public virtual int PiecesCount { get; set; } /// 5 public virtual string SNPrefix { get; set; } /// 6 public virtual int SNFirst { get; set; } /// 7 public virtual int SNDigitsCount { get; set; } /// 8 public virtual string SNSuffix { get; set; } /// 9 public virtual string RAPrefix { get; set; } /// 10 public virtual int RAFirst { get; set; } /// 11 public virtual int RADigitsCount { get; set; } /// 12 public virtual string RASuffix { get; set; } /// 13 public virtual int BaseNr1 { get; set; } public virtual int BaseNr2 { get; set; } public virtual int BaseNr3 { get; set; } public virtual int BaseNr4 { get; set; } public virtual int BaseNr5 { get; set; } public virtual string Remark { get; set; } /// 14 public OrderInfo() { POName = string.Empty; POState = (sbyte)OrderState.New; InitializeAll(); } public OrderInfo(string orderName) { POName = orderName; POState = (sbyte)OrderState.New; InitializeAll(); } public virtual void InitializeAll() { Workflow = string.Empty; TestProcedure = string.Empty; VariantCode = string.Empty; SNPrefix = string.Empty; SNSuffix = string.Empty; RAPrefix = string.Empty; RASuffix = string.Empty; Remark = string.Empty; } /// /// All members are copied except of ID (so that NHibernate works properly). /// List of groups is empty. /// /// New order ID string /// -1 = the same number of pieces as the original order /// public virtual IParamsProvider Clone() { var newOrder = new OrderInfo(); newOrder.POName = string.Empty; newOrder.POState = (sbyte)OrderState.New; newOrder.Workflow = Workflow; newOrder.TestProcedure = TestProcedure; newOrder.VariantCode = VariantCode; newOrder.PiecesCount = PiecesCount; newOrder.SNPrefix = SNPrefix; newOrder.SNFirst = SNFirst + PiecesCount; newOrder.SNDigitsCount = SNDigitsCount; newOrder.SNSuffix = SNSuffix; newOrder.RAPrefix = RAPrefix; newOrder.RAFirst = RAFirst + PiecesCount; newOrder.RADigitsCount = RADigitsCount; newOrder.RASuffix = RASuffix; newOrder.BaseNr1 = BaseNr1; newOrder.BaseNr2 = BaseNr2; newOrder.BaseNr3 = BaseNr3; newOrder.BaseNr4 = BaseNr4; newOrder.BaseNr5 = BaseNr5; newOrder.Remark = Remark; return newOrder; } public virtual XmlSerializer GetSerializer() { return null; } public virtual string ComponentName { get { return POName; } } string[] paramNames = new string[] { Strings.Order, Strings.State, Strings.Workflow, Strings.Test_procedure, Strings.Variant_code, Strings.Pieces_count, Strings.Serial_nr + " " + Strings.prefix, Strings.Serial_nr + " " + Strings.first, Strings.Serial_nr + " " + Strings.digits_count, Strings.Serial_nr + " " + Strings.suffix, Strings.Radio_address + " " + Strings.prefix, Strings.Radio_address + " " + Strings.first, Strings.Radio_address + " " + Strings.digits_count, Strings.Radio_address + " " + Strings.suffix, Strings.Remark, }; public virtual string ParamName(int i) { return paramNames[i]; } public virtual int ParamsCount() { return paramNames.Length; } public virtual ICollection ParamValues(int i) { var list = new List(); switch (i) { default: return null; } } public virtual string ToString(int i) { switch (i) { case 0: return POName; case 1: return ((OrderState)POState).ToString(); case 2: return Workflow; case 3: return TestProcedure; case 4: return VariantCode; case 5: return PiecesCount.ToString(); case 6: return SNPrefix; case 7: return SNFirst.ToString(); case 8: return SNDigitsCount.ToString(); case 9: return SNSuffix; case 10: return RAPrefix; case 11: return RAFirst.ToString(); case 12: return RADigitsCount.ToString(); case 13: return RASuffix; case 14: return Remark; default: return string.Format("order={0} pcs={1} wflow={2} proc={3} vaco={4} #1={5} #2={6} #3={7} #4={8} #5={9} remark={10}", POName, PiecesCount, Workflow, TestProcedure, VariantCode, BaseNr1, BaseNr2, BaseNr3, BaseNr4, BaseNr5, Remark); } } public virtual CfgUpdateFlags UpdateParam(int i, string str) { switch (i) { case 0: POName = str; return CfgUpdateFlags.RestartRqrd; case 1: POState = (sbyte)((str == OrderState.New.ToString()) ? OrderState.New : (str == OrderState.Active.ToString()) ? OrderState.Active : OrderState.Finished); return CfgUpdateFlags.RestartRqrd; case 2: Workflow = str; return CfgUpdateFlags.RestartRqrd; case 3: TestProcedure = str; return CfgUpdateFlags.RestartRqrd; case 4: VariantCode = str; return CfgUpdateFlags.RestartRqrd; case 5: PiecesCount = int.Parse(str); return CfgUpdateFlags.RestartRqrd; case 6: SNPrefix = str; return CfgUpdateFlags.RestartRqrd; case 7: SNFirst = int.Parse(str); return CfgUpdateFlags.RestartRqrd; case 8: SNDigitsCount = int.Parse(str); return CfgUpdateFlags.RestartRqrd; case 9: SNSuffix = str; return CfgUpdateFlags.RestartRqrd; case 10: RAPrefix = str; return CfgUpdateFlags.RestartRqrd; case 11: RAFirst = int.Parse(str); return CfgUpdateFlags.RestartRqrd; case 12: RADigitsCount = int.Parse(str); return CfgUpdateFlags.RestartRqrd; case 13: RASuffix = str; return CfgUpdateFlags.RestartRqrd; case 14: Remark = str; return CfgUpdateFlags.RestartRqrd; default: return CfgUpdateFlags.None; } } public virtual bool ValidateParam(int i, string str, out string message) { message = string.Empty; int idummy; switch (i) { case 0: case 2: case 3: case 4: /// nonempty string if (!string.IsNullOrEmpty(str)) return true; message = string.Format(Strings._0_should_not_be_empty, ParamName(i)); return false; case 5: case 8: case 12: /// positive integers if (int.TryParse(str, out idummy) && idummy > 0) return true; break; case 6: case 9: case 10: case 13: case 14: /// strings return true; case 7: case 11: /// non-negative integer if (int.TryParse(str, out idummy) && idummy >= 0) return true; break; default: message = "Invalid index"; return false; } message = string.Format(Strings.Invalid_0, ParamName(i)); return false; } public virtual bool UpdateEmbeddedDbEntity() { return true; /// =OK, do nothing } } public enum OrderState : sbyte { New = 0, Active = 1, Finished = 2, } }