protected void lstSwitches_SelectedIndexChanged(object sender, EventArgs e) { //This code will autoselect a VoIP Vlan in the drop down if a relation exsists. Select nothing if not. BrokenRulesDisplay.ResetBrokenRules(); Alert alert = new Alert(BrokenRulesDisplay); // Get the Stack's properties DeviceManagementGroup dmg = DeviceManagementGroup.GetByIdentification(int.Parse(lstSwitches.SelectedValue)); // If the Stack has a VoIP VLAN, select it from the DDL. if (dmg.VoIPVLANID != null) { lstVLANs.SelectedValue = dmg.VoIPVLANID.ToString(); } else { //send out a message letting them know that there is no connection. alert.AddWarning("Connection", @"No VoIP VLAN currently associated with selected switch."); alert.ShowBrokenRules(); lstVLANs.SelectedIndex = 0; } }
/// <summary> /// Edit Line Item Checked Changed event method. /// This Event allows the user to change the current settings and billing plans /// <param name="isAdmin">User has Ticket Admin Permissions</param> /// <paramref name="isSubmitter">User is the original Submitter</paramref> /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void chkItemEdit_CheckedChanged(object sender, EventArgs e) { CheckBox chkItemEdit = (CheckBox)sender; var ticket = getTicket(); var isAdmin = AuthorizationProvider.HasPermission("TicketAdmin"); var isSubmitter = ticket.CreatedBy == RisqueContext.CurrentUser.Identification; /*Grab All Controls within the gridview row repeater*/ var row = chkItemEdit.NamingContainer as GridViewRow; var line = getLineItem(ticket, row); var pnlItemTaggedVlans = row.FindControl("pnlItemTaggedVLANs") as Panel; var pnlItemOldServices = row.FindControl("pnlItemOldServices") as Panel; var pnlItemServices = row.FindControl("pnlItemServices") as Panel; var pnlItemBilling = row.FindControl("pnlItemBilling") as Panel; var pnlItemAccount = row.FindControl("pnlItemAccount") as Panel; var pnlNewVoIPVlan = (Panel)row.FindControl("pnlNewVoIPVlan"); var lblItemNewSpeed = row.FindControl("lblItemNewSpeed") as Label; var lblItemNewVLANLabel = row.FindControl("lblItemNewVLANLabel") as Label; var lblItemNewVLAN = row.FindControl("lblItemNewVLAN") as Label; var lblItemTaggedVLANs = row.FindControl("lblItemTaggedVLANs") as Label; var lblItemOldServices = row.FindControl("lblItemOldServices") as Label; var lblItemServices = row.FindControl("lblItemServices") as Label; var lblNewVoIPVlan = (Label)row.FindControl("lblNewVoIPVlan"); var litAccountNumbers = row.FindControl("litAccountNumbers") as Literal; var ddlItemNewSpeed = row.FindControl("ddlItemNewSpeed") as GroupDropDownList; var ddlItemNewVLAN = row.FindControl("ddlItemNewVLAN") as DropDownList; var ddlItemBilling = row.FindControl("ddlItemBilling") as DropDownList; var ddlAccountType = row.FindControl("ddlAccountType") as DropDownList; var lstItemTaggedVLANs = row.FindControl("lstItemTaggedVLANs") as ListBox; var lstItemServices = row.FindControl("lstItemServices") as ListBox; var txtAcct1 = row.FindControl("txtAcct1") as TextBox; var txtAcct2 = row.FindControl("txtAcct2") as TextBox; var txtAcct3 = row.FindControl("txtAcct3") as TextBox; if (((isSubmitter && ticket.StatusID == 1) || (isAdmin && ticket.StatusID <= 4)) && line.ActionID < 4) { // Submitted and Status 1 / OR / admin and status before pending billing and NOT a repair. if (chkItemEdit.Checked) { pnlItemTaggedVlans.Visible = true; pnlItemServices.Visible = true; pnlItemAccount.Visible = true; ddlItemNewSpeed.Visible = true; ddlItemNewVLAN.Visible = true; lstItemServices.Visible = true; lstItemTaggedVLANs.Visible = true; lblItemNewSpeed.Visible = false; lblItemNewVLAN.Visible = false; lblItemServices.Visible = false; lblItemTaggedVLANs.Visible = false; litAccountNumbers.Visible = false; // Load dropdown data List<VlanList.SimpleVLAN> vlans = new List<VlanList.SimpleVLAN>(); // new speed and vlan Interface pic = Interface.GetByIdentification(line.InterfaceID); ddlItemNewSpeed.Items.Clear(); ddlItemNewSpeed.Items.Insert(0, ""); // set speed option groups based on pic ID and speed type "is standard" ddlItemNewSpeed.AddItemGroup("Standard"); foreach (var speed in InterfaceSpeedList.GetValidSpeedsByInterface(pic, true)) { ddlItemNewSpeed.Items.Add(new ListItem(speed.Name, speed.Identification.ToString())); } ddlItemNewSpeed.AddItemGroup("Non-Standard"); foreach (var speed in InterfaceSpeedList.GetValidSpeedsByInterface(pic, false)) { ddlItemNewSpeed.Items.Add(new ListItem(speed.Name, speed.Identification.ToString())); } ddlItemNewSpeed.SelectedValue = line.SpeedID.ToString(); // new vlan vlans = VlanList.GetAllowedByLocation(pic.Device.Room.LocationID); ddlItemNewVLAN.DataSource = vlans; ddlItemNewVLAN.DataTextField = "FriendlyName"; ddlItemNewVLAN.DataValueField = "Identification"; ddlItemNewVLAN.DataBind(); ddlItemNewVLAN.Items.Insert(0, ""); foreach (var vlan in line.LineItemVLANs) { var li = new ListItem(null, vlan.VLANName); if (vlan.IsNative && !vlan.IsOld) { if (ddlItemNewVLAN.Items.FindByText(li.Text) != null) { ddlItemNewVLAN.SelectedValue = vlan.Vlanid.ToString(); break; } } } // Tagged VLAN(s) lstItemTaggedVLANs.DataSource = vlans; lstItemTaggedVLANs.DataTextField = "FriendlyName"; lstItemTaggedVLANs.DataValueField = "Identification"; lstItemTaggedVLANs.DataBind(); // Set tagged VLAN(s) var tagged = new List<string>(); foreach (var vlan in line.LineItemVLANs) { if (!vlan.IsNative && !vlan.IsOld) tagged.Add(vlan.Vlanid.ToString()); } foreach (ListItem vlan in lstItemTaggedVLANs.Items) { vlan.Selected = tagged.Contains(vlan.Value); } // Services lstItemServices.DataSource = ServiceList.FetchAll(); lstItemServices.DataTextField = "Name"; lstItemServices.DataValueField = "Identification"; lstItemServices.DataBind(); var services = new List<string>(); foreach (var service in line.LineItemServices) { if (!service.IsOld) services.Add(service.ServiceID.ToString()); } foreach (ListItem service in lstItemServices.Items) service.Selected = services.Contains(service.Value); if (isAdmin) { // billing plan pnlItemBilling.Visible = true; ddlItemBilling.DataSource = BillingPlanList.GetAll(); ddlItemBilling.DataTextField = "Name"; ddlItemBilling.DataValueField = "Identification"; ddlItemBilling.DataBind(); ddlItemBilling.Items.Insert(0, ""); if (line.BillingPlanID != null) ddlItemBilling.SelectedValue = line.BillingPlanID.ToString(); } // account types from database table ddlAccountType.DataSource = AccountTypeList.FetchAll(); ddlAccountType.DataTextField = "Name"; ddlAccountType.DataValueField = "Identification"; ddlAccountType.DataBind(); ddlAccountType.SelectedValue = line.AccountTypeID.ToString(); switch (ddlAccountType.SelectedItem.Text) { case "Business Partner Number": // show bpn fields txtAcct1.Visible = true; txtAcct2.Visible = false; txtAcct3.Visible = false; txtAcct1.Attributes.Add("Placeholder", "BPN"); txtAcct1.MaxLength = 10; txtAcct1.Text = line.AccountNumber1; // Set account number text. break; case "Cost Center": txtAcct1.Visible = true; txtAcct2.Visible = true; txtAcct3.Visible = true; txtAcct1.Attributes.Add("Placeholder", "Fund"); txtAcct2.Attributes.Add("Placeholder", "Cost Center"); txtAcct3.Attributes.Add("Placeholder", "SIO"); txtAcct1.MaxLength = 8; txtAcct1.Text = line.AccountNumber1; txtAcct2.Text = line.AccountNumber2; txtAcct3.Text = line.AccountNumber3; break; case "Real Order": txtAcct1.Visible = true; txtAcct2.Visible = true; txtAcct3.Visible = true; txtAcct1.Attributes.Add("Placeholder", "Fund"); txtAcct2.Attributes.Add("Placeholder", "Real Order"); txtAcct3.Attributes.Add("Placeholder", "Fund Center"); txtAcct1.MaxLength = 8; txtAcct1.Text = line.AccountNumber1; txtAcct2.Text = line.AccountNumber2; txtAcct3.Text = line.AccountNumber3; break; case "WBS Element": txtAcct1.Visible = true; txtAcct2.Visible = true; txtAcct3.Visible = false; txtAcct1.Attributes.Add("Placeholder", "WBS"); txtAcct2.Attributes.Add("Placeholder", "SIO"); txtAcct1.MaxLength = 10; txtAcct1.Text = line.AccountNumber1; txtAcct2.Text = line.AccountNumber2; break; } } else { if (lblItemTaggedVLANs.Text == @"None") { pnlItemTaggedVlans.Visible = false; lblItemNewVLANLabel.Text = @"New VLAN:"; } else lblItemNewVLANLabel.Text = @"New Native VLAN:"; if ((lblItemServices.Text == "None" && lblItemOldServices.Text == "None") || (lblItemServices.Text == "None" && !pnlItemOldServices.Visible)) pnlItemServices.Visible = false; pnlItemBilling.Visible = false; pnlItemAccount.Visible = false; ddlItemNewSpeed.Visible = false; ddlItemNewVLAN.Visible = false; lstItemServices.Visible = false; lstItemTaggedVLANs.Visible = false; lblItemNewSpeed.Visible = true; lblItemNewVLAN.Visible = true; lblItemServices.Visible = true; lblItemTaggedVLANs.Visible = true; litAccountNumbers.Visible = true; // SAVE ACCOUNT NUMBERS HERE because they're textboxes, and nobody likes a postback after a textbox. // Seriously, I'd rather drink skol vodka than postback after a textbox. var error = false; var alert = new Alert(BrokenRulesDisplay); if (ddlAccountType.SelectedValue == "1") { // cost center long validator; if (txtAcct1.Text.Trim().Length != 8 || !long.TryParse(txtAcct1.Text.Trim(), out validator) || !LineItem.VerifyNumber("FUND", txtAcct1.Text.Trim())) { error = true; alert.AddError("Bad Fund", "Fund must be a valid 8-digit number."); } if (txtAcct2.Text.Trim().Length != 10 || !long.TryParse(txtAcct2.Text.Trim(), out validator) || !LineItem.VerifyNumber("COST", txtAcct2.Text.Trim())) { error = true; alert.AddError("Bad Cost Center", "Cost Center must be a valid 10-digit number."); } if ((txtAcct3.Text.Trim().Length != 0 && txtAcct3.Text.Trim().Length != 10) || (txtAcct3.Text.Trim().Length != 0 && !long.TryParse(txtAcct3.Text.Trim(), out validator))) { error = true; alert.AddError("Bad SIO", "SIO must be a 10-digit number."); } } else if (ddlAccountType.SelectedValue == "2") { // real order long validator; if (txtAcct1.Text.Trim().Length != 8 || !long.TryParse(txtAcct1.Text.Trim(), out validator) || !LineItem.VerifyNumber("FUND", txtAcct1.Text.Trim())) { error = true; alert.AddError("Bad Fund", "Fund must be a valid 8-digit number."); } if (txtAcct2.Text.Trim().Length != 10 || !long.TryParse(txtAcct2.Text.Trim(), out validator) || !LineItem.VerifyNumber("ORDER", txtAcct2.Text.Trim())) { error = true; alert.AddError("Bad Real Order", "Real Order must be a valid 10-digit number."); } } else if (ddlAccountType.SelectedValue == "3") { // wbs element long validator; var match = Regex.Match(txtAcct1.Text, @"\bC[.][0-9][0-9][.][0-9][0-9][0-9][0-9][0-9]\b"); if (txtAcct1.Text.Trim().Length != 10 || !match.Success || !LineItem.VerifyNumber("WBS", txtAcct1.Text.Trim().Replace(".", string.Empty))) { error = true; alert.AddError("Bad WBS", "WBS must be a valid 7-digit number."); } if ((txtAcct2.Text.Trim().Length != 0 && txtAcct2.Text.Trim().Length != 10) || (txtAcct2.Text.Trim().Length != 0 && !long.TryParse(txtAcct2.Text.Trim(), out validator))) { error = true; alert.AddError("Bad SIO", "SIO must be a 10-digit number."); } } else if (ddlAccountType.SelectedValue == "4") { // business partner number long validator; if (txtAcct1.Text.Trim().Length != 7 || !txtAcct1.Text.Trim().StartsWith("3") || !long.TryParse(txtAcct1.Text.Trim(), out validator)) { error = true; alert.AddError("Bad BPN", "Business Partner Number must be a 7-digit number starting with '3'."); } } if (!error) // Save the account numbers now. { // check if any changes were made. if not, we shouldn't bother saving as that would also overwrite the billing plan (maybe someone decided that needed to be changed) if (line.AccountTypeID == int.Parse(ddlAccountType.SelectedValue) && (line.AccountNumber1 == txtAcct1.Text.Trim() || (line.AccountNumber1 == null && txtAcct1.Text.Trim() == string.Empty)) && (line.AccountNumber2 == txtAcct2.Text.Trim() || (line.AccountNumber2 == null && txtAcct2.Text.Trim() == string.Empty)) && (line.AccountNumber3 == txtAcct3.Text.Trim() || (line.AccountNumber3 == null && txtAcct3.Text.Trim() == string.Empty))) return; line.AccountTypeID = int.Parse(ddlAccountType.SelectedValue); line.AccountNumber1 = txtAcct1.Text.Trim(); line.AccountNumber2 = txtAcct2.Text.Trim() != string.Empty ? txtAcct2.Text.Trim() : null; line.AccountNumber3 = txtAcct3.Text.Trim() != string.Empty ? txtAcct3.Text.Trim() : null; // Set Billing Plan LineItem.SetBilling(line); // Save ticket.Save(); // Update Labels updateLiteral_Account(line, litAccountNumbers); } else { alert.AddWarning("Not saved", "Account Number changes for the line " + line.Picid + " were not saved due to errors. Other settings were saved successfully. Please try again using valid information."); scrollTop(); alert.ShowBrokenRules(); } } } }
// Billing and Text Box Rule Validation and Bulk Upload Validation protected bool AcctValidation(Alert alert) { bool canSave = true; // Verify Account Info switch (ddlAccountType.SelectedValue) { case "1": // Cost Center { long validator; if (txtFund.Text.Trim().Length != 8 || !long.TryParse(txtFund.Text.Trim(), out validator) || !LineItem.VerifyNumber("FUND", txtFund.Text.Trim())) { canSave = false; alert.AddError("Bad Fund", "Fund must be a valid 8-digit number."); } if (txtCostCenter.Text.Trim().Length != 10 || !long.TryParse(txtCostCenter.Text.Trim(), out validator) || !LineItem.VerifyNumber("COST", txtCostCenter.Text.Trim())) { canSave = false; alert.AddError("Bad Cost Center", "Cost Center must be a valid 10-digit number."); } if ((txtSIO.Text.Trim().Length != 0 && txtSIO.Text.Trim().Length != 10) || (txtSIO.Text.Trim().Length != 0 && !long.TryParse(txtSIO.Text.Trim(), out validator))) { canSave = false; alert.AddError("Bad SIO", "SIO must be a 10-digit number."); } break; } case "2": // Real Order { long validator; if (txtFund.Text.Trim().Length != 8 || !long.TryParse(txtFund.Text.Trim(), out validator) || !LineItem.VerifyNumber("FUND", txtFund.Text.Trim())) { canSave = false; alert.AddError("Bad Fund", "Fund must be a valid 8-digit number."); } if (txtRealOrder.Text.Trim().Length != 10 || !long.TryParse(txtRealOrder.Text.Trim(), out validator) || !LineItem.VerifyNumber("ORDER", txtRealOrder.Text.Trim())) { canSave = false; alert.AddError("Bad Real Order", "Real Order must be a valid 10-digit number."); } break; } case "3": // WBS Element { long validator; Match match = Regex.Match(txtWBS.Text, @"\bC[.][0-9][0-9][.][0-9][0-9][0-9][0-9][0-9]\b"); if (txtWBS.Text.Trim().Length != 10 || !match.Success || !LineItem.VerifyNumber("WBS", txtWBS.Text.Trim().Replace(".", string.Empty))) { canSave = false; alert.AddError("Bad WBS", "WBS must be a valid 7-digit number."); } if ((txtSIO.Text.Trim().Length != 0 && txtSIO.Text.Trim().Length != 10) || (txtSIO.Text.Trim().Length != 0 && !long.TryParse(txtSIO.Text.Trim(), out validator))) { canSave = false; alert.AddError("Bad SIO", "SIO must be a 10-digit number."); } break; } case "4": // Business Partner Number { long validator; if (txtBPN.Text.Trim().Length != 7 || !txtBPN.Text.Trim().StartsWith("3") || !long.TryParse(txtBPN.Text.Trim(), out validator)) { canSave = false; alert.AddError("Bad BPN", "Business Partner Number must be a 7-digit number starting with '3'."); } break; } default: { canSave = false; alert.AddWarning("No Account", "Select an Account Type"); break; } } if (canSave == false) // Send back to user to fix Account Errors { alert.ShowBrokenRules(); return false; } else return true; }
// Validate entire line item row within a bulk upload private bool CheckLine_csv(string[] values, Alert alert, List<string> validPiCs) { bool valid = true; TicketsBusiness.Action action = null; Interface pic = null; // check that the line is valid /* 0 = Line * 1 = Action * 2 = PIC * 3 = Speed * 4 = VLAN * 5 = Tagged VLANs * 6 = Services * 7 = Fund * 8 = Cost Center * 9 = Real Order * 10 = WBS * 11 = SIO * 12 = BPN * 13 = Repair Notes * 14 = Phone Only Connection */ // Validate Action if (values[1] != string.Empty) { if (FormatAction_csv(values[1]) == TicketsBusiness.Action.Activate) action = TicketsBusiness.Action.GetByIdentification(1); else if (FormatAction_csv(values[1]) == TicketsBusiness.Action.Modify) action = TicketsBusiness.Action.GetByIdentification(2); else if (FormatAction_csv(values[1]) == TicketsBusiness.Action.Deactivate) action = TicketsBusiness.Action.GetByIdentification(3); else if (FormatAction_csv(values[1]) == TicketsBusiness.Action.Repair) action = TicketsBusiness.Action.GetByIdentification(4); else { valid = false; alert.AddError("Bad action", "Action value at line " + values[0] + " is invalid."); } } else { valid = false; alert.AddError("Bad action", "Action value at line " + values[0] + " is required."); } // Validate PICID if (values[2] != string.Empty) { pic = GetPic(values[2]); Ticket existing = pic != null ? LineItem.GetPICInActiveTicket(pic.FriendlyLongName) : null; if (pic == null) { valid = false; alert.AddError("Bad pic", "PIC ID value at line " + values[0] + " is a PIC that is not in Risque."); } else if (AmdLineItems.Select("PICID = '" + pic.FriendlyLongName + "'").Length != 0 || RepairLineItems.Select("PICID = '" + pic.FriendlyLongName + "'").Length != 0) { //check if PIC is in an existing line already valid = false; alert.AddError("Bad pic", "PIC ID value at line " + values[0] + " is already in a line item below."); } else if (existing != null) { // check if PIC is in an open ticket already valid = false; alert.AddError("Bad pic", "Line " + values[0] + ": There is another open data ticket in the system that is requesting action on this same PIC. The other ticket number is " + existing.Identification + " and was submitted by " + existing.CreatorName + ". You may not request action on this PIC until the other ticket has been completed."); } else if (!InterfaceRestrictionAssignment.IsPICChangeAllowed(pic, RisqueContext.CurrentUser) && !AuthorizationProvider.HasPermission("PICLockBypass")) { // check if PIC is locked valid = false; alert.AddError("PIC locked", "The PIC at line " + values[0] + " is locked and changes cannot be submitted by you."); } else if (pic.Device.DeviceDefinition.DeviceTypeID == 1005 && !AuthorizationProvider.HasPermission("APPICSubmitter")) { // check if AP PIC valid = false; alert.AddError("AP PIC", "Sorry, but the PIC at line " + values[0] + " is reserved for use only by ITaP Data Networks personnel. Please select a different PIC ID to proceed."); } else if (validPiCs.Contains(values[2], StringComparer.InvariantCultureIgnoreCase)) { valid = false; alert.AddError("Bad pic", "PIC ID: <b>" + values[2] + "</b> at line item <b>" + values[0] + "</b> is duplicated in this file. Please correct the file and try again."); } else //--Add Valid PICs to a List--// validPiCs.Add(values[2]); } else { valid = false; alert.AddError("Bad pic", "PIC ID value at line " + values[0] + " is required."); } // Leave the rest of this method if it is a Phone Only Connection if (values[14] == "Y".ToUpperInvariant()) { var roomId = pic.Device.RoomID.ToString(); var isVoip = string.Empty; isVoip = Risque.Utility.SqlHelper.GetSingleSqlValue(@"SELECT location.IsVoip AS VOIP FROM Records.dbo.Rooms AS room JOIN Records.dbo.Locations AS location ON room.LocationID = location.ID WHERE room.ID = " + roomId + ";", Risque.Utility.SqlHelper.GetConnectionString("Records")); if (isVoip != "True") { //Return to user -- building is not listed as a VOIP Building in records. alert.AddWarning("Phone Only", "PIC ID: <b>" + values[2] + "</b> at line item <b>" + values[0] + "</b> is not designated as a VoIP building. Please correct the file and try again."); valid = false; return valid; } // Check voice only account numbers for activate and modify only. if (action != null && (action.Name == "Modify" || action.Name == "Activate")) valid = AcctValidation_csv(values, alert); return valid; } // check if on the default vlan var hasDefaultVlan = false; foreach (InterfaceVLAN vlan in pic.InterfaceVLANs) { if (vlan.Vlan.Number == 1) { hasDefaultVlan = true; break; } } if (!(pic.InterfaceVLANs.Count == 0 || hasDefaultVlan)) { // PIC is active if (action != null && action.Name == TicketsBusiness.Action.Activate) { valid = false; alert.AddError("Bad pic", "Cannot " + action.Name + " PIC at line " + values[0] + " because it is already active."); } } else { // PIC is inactive if (action != null && action.Name != TicketsBusiness.Action.Activate) { valid = false; alert.AddError("Bad pic", "Cannot " + action.Name + " PIC at line " + values[0] + " because it is inactive."); } } // We have a valid pic so we can check the other fields as well, if activate or modify if (action != null && (valid && (action.Identification == 1 || action.Identification == 2))) { CheckLineSpecialCases_csv(values); // validate speed if (values[3] != string.Empty) { List<string> validSpeed = new List<string> {"1", "2"}; // Constructor. IReadOnlyCollection<string> read = new ReadOnlyCollection<string>(validSpeed); InterfaceSpeedList speedMatches = InterfaceSpeedList.GetByCriteria(new InterfaceSpeedCriteria { Name = values[3] }); if (speedMatches.Count < 1) { valid = false; alert.AddError("Bad speed", "Speed value at line " + values[0] + " is not a valid speed in Risque."); } else if (speedMatches.Count > 1) { valid = false; alert.AddError("Bad speed", "Speed value at line " + values[0] + " is ambiguous."); } else { // check if speed is valid for this pic bool found = false; InterfaceSpeed speed = speedMatches[0]; List<InterfaceSpeed> validSpeeds = InterfaceSpeedList.GetValidSpeedsByInterface(pic); foreach (InterfaceSpeed ispeed in validSpeeds) { if (ispeed.Identification == speed.Identification) { found = true; break; } } if (!found) { valid = false; alert.AddError("Bad speed", "Speed value at line " + values[0] + " is invalid for the given PIC."); } } } else { valid = false; alert.AddError("Bad speed", "Speed value at line " + values[0] + " is required."); } // validate vlans if (values[4] != string.Empty) { List<Vlan> vlanMatches = VlanList.FetchByFriendlyName(values[4]); if (vlanMatches.Count < 1) { valid = false; alert.AddError("Bad vlan", "VLAN value at line " + values[0] + " contains a VLAN that is not in Risque."); } else if (vlanMatches.Count > 1) { valid = false; alert.AddError("Bad vlan", "VLAN value at line " + values[0] + " contains a VLAN that is ambiguous."); } else { // check if vlan is valid for this pic bool found = false; Vlan match = vlanMatches[0]; List<VlanList.SimpleVLAN> validVlans = VlanList.GetAllowedByLocation(pic.Device.Room.LocationID); foreach (VlanList.SimpleVLAN v in validVlans) { if (v.Identification == match.Identification) { found = true; break; } } if (!found) { valid = false; alert.AddError("Bad vlan", "VLAN value at line " + values[0] + " contains a VLAN that is invalid for the given PIC."); } } } else { valid = false; alert.AddError("Bad vlan", "VLAN value at line " + values[0] + " is required."); } // validate tagged vlans if (values[5] != string.Empty) { string[] vlans = values[5].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray(); foreach (string vlan in vlans) { if (vlan == values[4]) { valid = false; alert.AddError("Bad vlan", "Tagged VLAN(s) value at line " + values[0] + " contains a VLAN that is the same as the native VLAN. Please ensure all VLANs are unique."); } List<Vlan> vlanMatches = VlanList.FetchByFriendlyName(vlan); if (vlanMatches.Count < 1) { valid = false; alert.AddError("Bad vlan", "Tagged VLAN(s) value at line " + values[0] + " contains a VLAN that is not in Risque."); } else if (vlanMatches.Count > 1) { valid = false; alert.AddError("Bad vlan", "Tagged VLAN(s) value at line " + values[0] + " contains a VLAN that is ambiguous."); } else { // check if vlan is valid for this pic bool found = false; Vlan match = vlanMatches[0]; List<VlanList.SimpleVLAN> validVlans = VlanList.GetAllowedByLocation(pic.Device.Room.LocationID); foreach (VlanList.SimpleVLAN v in validVlans) { if (v.Identification == match.Identification) { found = true; break; } } if (!found) alert.AddError("Bad vlan", "Tagged VLAN(s) value at line " + values[0] + " contains a VLAN that is invalid for the given PIC."); } } } // validate services if (values[6] != string.Empty) { string[] services = values[6].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray(); foreach (string service in services) { ServiceList serviceMatches = ServiceList.GetByCriteria(new ServiceCriteria { Name = service }); if (serviceMatches.Count < 1) { valid = false; alert.AddError("Bad service", "Advanced value at line " + values[0] + " contains a service that is not in Risque."); } else if (serviceMatches.Count > 1) { valid = false; alert.AddError("Bad service", "Advanced value at line " + values[0] + " contains a service that is ambiguous."); } } } // Validate Account Info if (AcctValidation_csv(values, alert) == false) valid = false; } else if (valid && action.Identification == 4) { // repair validation if (values[13] != string.Empty) { if (values[13].Length < 10) { valid = false; alert.AddError("Bad repair", "Repair Notes value at line " + values[0] + " must be at least 10 characters."); } } else { valid = false; alert.AddError("Bad repair", "Repair Notes value at line " + values[0] + " is required."); } } return valid; }
protected void btnUpload_Click(object sender, EventArgs e) { var alert = new Alert(BulkUploadBrokenRulesDisplay); bool valid = true; // get file Stream csvFile = uplPICs.PostedFile.InputStream; var csvName = uplPICs.PostedFile.FileName; // if (csvName == string.Empty) { valid = false; alert.AddError("No file", "Please select a file and click Upload CSV File."); } // check size if (valid && uplPICs.PostedFile.ContentLength >= 35840) { valid = false; alert.AddError("Too large", "File size is too large. Files must be smaller than 35 KB."); } // check extension if (valid) { string[] fileExt = csvName.Split('.'); string ext = fileExt[fileExt.Length - 1]; if (ext.ToLower() != "csv") { valid = false; alert.AddError("Not CSV", "File uploaded must have an extension of \".csv\"."); } } // Create StreamReader StreamReader sr = new StreamReader(csvFile); try { if (valid) { int i = 0; string line; // Keep track of PICS to deduplicate List<string> validPiCs = new List<string>(); // ENTER readline loop while ((line = sr.ReadLine()) != null) { // check line if (line.Equals(string.Empty) || i == 0) { i++; continue; } String strpattern = "[0-9a-z,A-Z\t\v\r\n]"; if (!Regex.IsMatch(line, strpattern)) { valid = false; alert.AddError("Line invalid", "Line " + (i + 1) + " is invalid."); continue; } //--Split the Line into an Array of Strings using Commas string[] values = line.Split(Convert.ToChar(",")); //--Validate Line Numbers String strlinepattern = "^[0-9]+$"; if (!Regex.IsMatch(values[0], strlinepattern)) { valid = false; alert.AddError("Invalid line number", "Line number at line " + i + " is invalid."); } //Run validation to ensure the line items are in the correct format if (!CheckLine_csv(values, alert, validPiCs)) { valid = false; } i++; } if (!validPiCs.Any()) { valid = false; alert.AddWarning("No Data", "There were no records in the bulk upload file to be processed."); } if (valid) { i = 0; // Passed checkCSVLine Method -- So add to Line Items csvFile.Seek(0, SeekOrigin.Begin); // Start at the beginning while ((line = sr.ReadLine()) != null) { if (line.Equals(string.Empty) || i == 0) { i++; continue; } //--Fix Excel Weirdness and smart single quotes and apostrophe--// line = Regex.Replace(line, "[\u2018\u2019\u201A]", "'"); //--Smart double quotes line = Regex.Replace(line, "[\u201C\u201D\u201E]", "\""); //--Ellipsis line = Regex.Replace(line, "[\u2026\uFFFD]", "..."); //--Split line into array using comma string[] values = line.Split(Convert.ToChar(",")); //--Add to line items! AddLine_csv(values); i++; } } // END of Readline Loop } } catch { valid = false; alert.AddError("Critical error", "The file submitted includes a critical error and cannot be validated."); } finally { sr.Close(); //Close the stream reader } if (valid) { alert.AddSuccess("Success", "The items from the uploaded file have been added to this ticket successfully."); } //Bind The GridViews and Datatables BindAmdLineItems(); BindRepairLineItems(); alert.ShowBrokenRules(); //Close the intial Stream csvFile.Close(); }