Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
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&nbsp;VLAN:";
                    }
                    else
                        lblItemNewVLANLabel.Text = @"New&nbsp;Native&nbsp;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();
                    }
                }
            }
        }
Ejemplo n.º 3
0
 // 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;
 }
Ejemplo n.º 4
0
        // 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;
        }
Ejemplo n.º 5
0
        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();
        }