示例#1
0
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            BrokenRulesDisplay.ResetBrokenRules();
            Alert alert = new Alert(BrokenRulesDisplay);
            bool canSave = true;

            #region Error Checking

            // Check if a stack is selected
            if (lstSwitches.SelectedIndex < 0)
            {
                alert.AddError("Select Stack Error", "Both a device and a VLAN must be selected before saving the record.");
                canSave = false;
            }

            // Check if the selected VoIP VLAN is used as a Native or Tagged on any interfaces
            if (canSave && lstVLANs.SelectedIndex != 0)
            {
                string query = @"SELECT COUNT(*)
                             FROM InterfaceVLANs
                             WHERE VLANID = " + lstVLANs.SelectedValue;
                int matches = int.Parse(Risque.Utility.SqlHelper.GetSingleSqlValue(query, sdsSwitches.ConnectionString));

                if (matches != 0)
                {
                    alert.AddError("In Use Error", "This VLAN is used elsewhere. A VoIP VLAN cannot be used as a tagged or native VLAN.");
                    canSave = false;
                }
            }

            #endregion Error Checking

            if (canSave)
            {
                // Get the Stack's properties.
                DeviceManagementGroup dmg = DeviceManagementGroup.GetByIdentification(int.Parse(lstSwitches.SelectedValue));

                // Assign the VoIP VLAN to the stack.
                dmg.VoIPVLANID = lstVLANs.SelectedIndex != 0 ? (int?) int.Parse(lstVLANs.SelectedValue) : null;

                // Update the VLAN to be a VoIP Vlan
                if (lstVLANs.SelectedIndex != 0)
                {
                    Vlan v = Vlan.GetByIdentification(int.Parse(lstVLANs.SelectedValue));
                    v.IsVoIP = true;
                    v.Save();
                }

                // Save settings & display success mesage.
                dmg.Save();
                alert.AddSuccess("Success", "Successfully associated device " + lstSwitches.SelectedItem + " with VLAN " + lstVLANs.SelectedItem + ".");
            }

            alert.ShowBrokenRules();
        }
示例#2
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;
            }
        }
示例#3
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();
                    }
                }
            }
        }
示例#4
0
        // -- Save Edit Due By Date -- For Ticket Admins ONLY
        protected void btnEditDueBy_Click(object sender, EventArgs e)
        {
            var ticket = getTicket(); // Grab current Ticket Info
            showModal_EditDueBy.Value = "true"; // Show Modal
            var errorChkModal = new Alert(BrokenRulesDisplayEditDueBy);
            BrokenRulesDisplayEditDueBy.ResetBrokenRules(); // Reset Broken Rules
            var isValid = true;

            if (txtEditDueDate.Text.Trim() == string.Empty) //A date must be entered
            {
                errorChkModal.AddError("0", "Please enter a date.");
                isValid = false;
            }
            if (txtEditDueTime.Text.Trim() == string.Empty) //A time must be entered
            {
                errorChkModal.AddError("1", "Please enter a time.");
                isValid = false;
            }

            if ((txtEditDueTime.Text.Trim() != string.Empty || txtEditDueDate.Text.Trim() != string.Empty) &&
                DateTime.Parse(txtEditDueDate.Text + ' ' + txtEditDueTime.Text) < DateTime.Now)
            {
                errorChkModal.AddError("2", "Date and time can not be before " + DateTime.Now + ".");
                isValid = false;
            }
            if (isValid == false)
            {
                //Set Values to default
                var dueDateValues = lblTicketDue.Text.Split(' ');
                txtEditDueDate.Text = dueDateValues[0];
                txtEditDueTime.Text = dueDateValues[1] + ' ' + dueDateValues[2];
                errorChkModal.ShowBrokenRules();
                return;
            }

            if (isValid) // Update new Date/Time
            {
                var newDueDate = DateTime.Parse(txtEditDueDate.Text + ' ' + txtEditDueTime.Text);
                ticket.DueDate = newDueDate;
                if (rdoNewDueDateScheduled_YES.Checked)
                {
                    ticket.ScheduledDate = newDueDate;
                    ticket.PriorityID = 3;
                }
                else
                {
                    ticket.ScheduledDate = null;
                    ticket.PriorityID = 1;
                }

                ticket = ticket.Save();

                lblTicketDue.Text = ticket.ScheduledDate == null
                    ? (ticket.DueDate == null ? "N/A" : ((DateTime)ticket.DueDate).ToString("M/d/yyyy h:mm tt"))
                    : ((DateTime)ticket.ScheduledDate).ToString("M/d/yyyy h:mm tt") + " (s)";
                UpdatePriorityLabel(ticket);
                showModal_EditDueBy.Value = "false";
            }
        }
示例#5
0
        //--Save and Submit all Line Items to be created for Tickets
        protected void btnSave_Click(object sender, EventArgs e)
        {
            // Validate that all required data is present for the current line items state
            List<int> createdTickets = new List<int>();
            Alert alert = new Alert(BrokenRulesDisplay);
            bool needsPriorityConfirmed = false;
            bool canSave = true;

            if (txtContactName.Text.Trim() == string.Empty)
            {
                rfvName.IsValid = false;
                txtContactName.Focus();
                canSave = false;
            }

            if (txtContactPhone.Text.Trim() == string.Empty)
            {
                rfvPhone.IsValid = false;
                txtContactPhone.Focus();
                canSave = false;
            }

            if (txtContactEmail.Text.Trim() == string.Empty)
            {
                rfvEmail.IsValid = false;
                txtContactEmail.Focus();
                canSave = false;
            }

            Match emailMatch = Regex.Match(txtContactEmail.Text.Trim(), @"\b[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\b");

            if (txtContactEmail.Text.Trim() != "" && !emailMatch.Success)
            {
                canSave = false;
                alert.AddError("Bad email", "Contact Email must be a valid email address.");
            }

            if (AmdLineItems.Rows.Count == 0 && RepairLineItems.Rows.Count == 0)
            {
                canSave = false;
                alert.AddError("No items", "A ticket must have at least one line item before being submitted.");
            }
            // save priority and comments to datatable then check if required fields are present
            PreservePriorityAndComments();
            //
            foreach (RepeaterItem item in rptBuildings.Items)
            {
                HiddenField rowLocationId = (HiddenField)item.FindControl("rowLocationID");
                RadioButton rdoPriorityRush = (RadioButton)item.FindControl("rdoPriorityRush");
                RadioButton rdoPriorityScheduled = (RadioButton)item.FindControl("rdoPriorityScheduled");

                if (rdoPriorityRush.Checked)
                {   // Rush Priority
                    needsPriorityConfirmed = true;

                    TextBox txtRushRationale = (TextBox)item.FindControl("txtRushRationale");
                    string validateLength = txtRushRationale.Text.Trim();
                    validateLength = validateLength.Replace("\r\n", " ");

                    Match match = Regex.Match(validateLength, @"^((\b[a-zA-Z.]{1,40}\b).*){3,}$");

                    if (!match.Success)
                    {
                        canSave = false;
                        alert.AddError("Needs rush rationale", "Rush Priority Rationale for building " + Location.GetByIdentification(int.Parse(rowLocationId.Value)).ShortName + " must contain at least 3 words.");
                    }
                }
                else if (rdoPriorityScheduled.Checked)
                {    // Scheduled Priority
                    needsPriorityConfirmed = true;
                    TextBox txtScheduledDate = (TextBox)item.FindControl("txtScheduledDate");
                    TextBox txtScheduledTime = (TextBox)item.FindControl("txtScheduledTime");
                    DateTime scheduled;

                    if (txtScheduledDate.Text == "" || txtScheduledTime.Text == "")
                    {
                        canSave = false;
                        alert.AddError("Needs date", "Scheduled Date and Time for building " + Location.GetByIdentification(int.Parse(rowLocationId.Value)).ShortName + " must be a valid date and time.");
                    }
                    else if (DateTime.TryParse(txtScheduledDate.Text.Trim() + " " + txtScheduledTime.Text.Trim(), out scheduled))
                    {
                        if (DateTime.Now.AddDays(Ticket.GetNumberBusinessDaysFromDate(DateTime.Now, 3)) > scheduled)
                        {
                            canSave = false;
                            alert.AddError("Needs date", "Scheduled Date and Time for building " + Location.GetByIdentification(int.Parse(rowLocationId.Value)).ShortName + " must be at least 3 business days from now.");
                        }
                    }
                }
            }
            if (needsPriorityConfirmed)
            {
                if (!chkPriorityConfirm.Checked)
                {
                    canSave = false;
                    alert.AddError("Needs priority confirmed", "You must acknowledge the 3-day business rule before submitting this ticket.");
                }
            }

            if (canSave)
            {
                foreach (RepeaterItem building in rptBuildings.Items)
                {
                    HiddenField rowLocationId = (HiddenField)building.FindControl("rowLocationID");
                    DataRow[] lineItemRow = AmdBuildings.Select("LocationID = " + rowLocationId.Value);

                    // Create Ticket and set values in the database, is populated from <amdLineItems>
                    foreach (DataRow row in lineItemRow)
                    {
                        // Create a new ticket for each building
                        Ticket ticket = Ticket.NewTicket();

                        // Populate Contact Data and Status
                        PopulateTicketGeneralData(ticket);

                        // Set ticket priority <amdLineItem>
                        if (row["PriorityID"] != DBNull.Value)
                            ticket.PriorityID = (int)row["PriorityID"];
                        else
                            ticket.PriorityID = 1;

                        // Rush rationale as comment, also set due date <amdLineItem>
                        if (ticket.PriorityID == 2)
                        {
                            Comment rush = ticket.Comments.AddNew();
                            rush.ClientName = RisqueContext.CurrentUser.FullName;
                            rush.IsInternal = false;
                            rush.Text = "Rationale for Rush priority: " + row["RushRationale"];
                            ticket.DueDate = DateTime.Now.AddDays(Ticket.GetNumberBusinessDaysFromDate(DateTime.Now, 1));
                        }
                        else
                        {
                            ticket.DueDate = DateTime.Now.AddDays(Ticket.GetNumberBusinessDaysFromDate(DateTime.Now, 3));
                        }

                        // Set Schedule Date <amdLineItem>
                        if (ticket.PriorityID == 3)
                            ticket.ScheduledDate = (DateTime?) row["ScheduledDate"];

                        // Comments amdLineItem>
                        if (row["Comment"].ToString() != string.Empty)
                        {
                            Comment comment = ticket.Comments.AddNew();
                            comment.ClientName = RisqueContext.CurrentUser.FullName;
                            comment.IsInternal = false;
                            comment.Text = row["Comment"].ToString();
                        }
                        bool isAccountChangeOnly = true;
                        bool isStandard          = true;
                        bool changeToStandard    = false;
                        bool addEngineerNote     = false;
                        bool addVoiceVlanNote    = false;

                        // Line Items (Activate / Modify / Deactivate)
                        foreach (DataRow drLineItem in AmdLineItems.Select("LocationID = " + rowLocationId.Value))
                        {
                            // Create a New Line Item for the Ticket.
                            LineItem lineItemPic = ticket.LineItems.AddNew();
                            // Check if anything has changed outside of billing. If so -- it is no long an account change only line item.
                            if ((int)drLineItem["ActionID"] == 3 || !(bool)drLineItem["IsOnlyAccountChange"])
                                isAccountChangeOnly = false;

                            // Populate from DataTable.
                            lineItemPic.ActionID = (int) drLineItem["ActionID"];
                            lineItemPic.Picid = drLineItem["PICID"].ToString();
                            lineItemPic.InterfaceID = (int) drLineItem["InterfaceID"];
                            lineItemPic.IsDone = isAccountChangeOnly;

                            // If the LineItem is not a Phone Only Connection -- Do a Normal Data Ticket -- Else add Phone Only Values
                            if ((bool?) drLineItem["IsVoIP"] == false)
                            {
                                // Set new native vlan(s) for the line item.
                                if (drLineItem["NativeVLAN"] != DBNull.Value)
                                    LineItemVLAN.SaveNewNativeVlan(lineItemPic, drLineItem);

                                // Set new tagged VLAN(s) for the the line item.
                                if (drLineItem["InterfaceVLANs"] != DBNull.Value)
                                    LineItemVLAN.SaveNewTaggedVlans(lineItemPic, drLineItem);

                                // If an Activate there are no current tagged vlan(s) to set.
                                if (!lineItemPic.ActionID.Equals(1))
                                {
                                    Interface currentInterface = Interface.GetByIdentification(lineItemPic.InterfaceID);

                                    // Save current native vlan to the ticket line item.
                                    LineItemVLAN.SaveCurrentNativeVlan(currentInterface, lineItemPic);

                                    // Save current tagged vlan to the ticket line item.
                                    LineItemVLAN.SaveCurrentTaggedVlans(currentInterface, lineItemPic);

                                    // Save current voip vlan(if any) to the ticket line item.
                                    LineItemVLAN.SaveCurrentVoipVlan(currentInterface, lineItemPic);
                                }

                                // Set Data Service Assignments
                                if (drLineItem["InterfaceServiceAssignments"] != DBNull.Value)
                                {
                                    string[] serviceNames =
                                        drLineItem["ServiceNames"].ToString()
                                            .Split(new[] {"<br />"}, StringSplitOptions.None);
                                    List<int> serviceIDs = (List<int>) drLineItem["InterfaceServiceAssignments"];

                                    for (var i = 0; i < serviceIDs.Count; i++)
                                    {
                                        LineItemService service = lineItemPic.LineItemServices.AddNew();
                                        service.ServiceID = serviceIDs[i];
                                        service.ServiceName = serviceNames[i];
                                        service.IsOld = false;

                                        // Add Engineer Note
                                        if (service.ServiceName == "Port Channel" ||
                                            service.ServiceName == "BPDU Guard Disable")
                                            addEngineerNote = true;

                                        if (service.ServiceName == "Voice VLAN") // Add voice VLAN Note
                                            addVoiceVlanNote = true;
                                    }
                                }
                                // Set Data Ticket Billing Data,
                                if (drLineItem["AccountTypeID"] != DBNull.Value)
                                    lineItemPic.AccountTypeID = drLineItem["AccountTypeID"] as int?;

                                if (drLineItem["AccountNumber1"] != DBNull.Value)
                                    lineItemPic.AccountNumber1 = drLineItem["AccountNumber1"].ToString();

                                if (drLineItem["AccountNumber2"] != DBNull.Value)
                                    lineItemPic.AccountNumber2 = drLineItem["AccountNumber2"].ToString();

                                if (drLineItem["AccountNumber3"] != DBNull.Value)
                                    lineItemPic.AccountNumber3 = drLineItem["AccountNumber3"].ToString();

                                if (drLineItem["InterfaceSpeedID"] != DBNull.Value)
                                {
                                    lineItemPic.SpeedID = (int) drLineItem["InterfaceSpeedID"];
                                    lineItemPic.SpeedName = drLineItem["SpeedName"].ToString();

                                    // Set Billing Plan if Interface speed exists
                                    LineItem.SetBilling(lineItemPic);
                                }
                            }
                            // Set IsVOIP Data -> 'Phone Only Connection'
                            else
                            {
                                // If the line item was voip and cisco and it is still a phone only connection then its an account change only.
                                if (_containsVoIp && _containsCisco)
                                    isAccountChangeOnly = true;
                                else
                                    isAccountChangeOnly = false;
                                        // Changed to phone only. Won't be an account change only

                                lineItemPic.IsDone = false;

                                // Set Default values for a Phone Only Connection.
                                LineItem.SetPhoneOnlyLineItem(lineItemPic, isAccountChangeOnly);

                                // If PIC is not an activate. Set current VLAN(s) for the line item.
                                if (!lineItemPic.ActionID.Equals(1))
                                {
                                    Interface currentInterface = Interface.GetByIdentification(lineItemPic.InterfaceID);
                                    LineItemVLAN.SaveCurrentNativeVlan(currentInterface, lineItemPic);
                                    LineItemVLAN.SaveCurrentTaggedVlans(currentInterface, lineItemPic);
                                }

                                // Set VoIP Billing Data
                                if (drLineItem["AccountTypeID"] != DBNull.Value)
                                    lineItemPic.AccountTypeID = (int?) drLineItem["AccountTypeID"];

                                if (drLineItem["AccountNumber1"] != DBNull.Value)
                                    lineItemPic.AccountNumber1 = drLineItem["AccountNumber1"].ToString();

                                if (drLineItem["AccountNumber2"] != DBNull.Value)
                                    lineItemPic.AccountNumber2 = drLineItem["AccountNumber2"].ToString();

                                if (drLineItem["AccountNumber3"] != DBNull.Value)
                                    lineItemPic.AccountNumber3 = drLineItem["AccountNumber3"].ToString();

                                // Set current billg plan.
                                LineItem.SetBilling(lineItemPic);

                                // Populate the Switch VOIP Vlan Value if it exists
                                if ((int) drLineItem["ActionID"] == 2 || (int) drLineItem["ActionID"] == 1)
                                    PopSwitchVoIp(lineItemPic);
                            }

                            // If previous BillingPlan was saved -- Check if it has changed from Premium to Standard Account
                            if (drLineItem["prevBillingPlanID"] != DBNull.Value)
                            {
                                // Check if billing plan has changed from Premium to a Standard.  If so update changeToStandard to get sent to billing
                                if ((int) lineItemPic.BillingPlanID != (int) drLineItem["prevBillingPlanID"] && lineItemPic.BillingPlanID == 16)
                                    changeToStandard = true;
                            }
                            //Check Billing Plan 16 = 'DTCSTANDARD'
                            if (lineItemPic.BillingPlanID != 16)
                                isStandard = false;

                            if (drLineItem["isTrunk"] != DBNull.Value)
                            {
                                if ((bool) drLineItem["isTrunk"])
                                {
                                    Comment trunkNote = ticket.Comments.AddNew();
                                    trunkNote.ClientName = "Risque System";
                                    trunkNote.IsInternal = true;
                                    trunkNote.Text = lineItemPic.Picid + ": is <b>Trunk.</b>";
                                }
                            }
                            AddCurrentSettingsToLine(lineItemPic); // Populate current PIC settings
                        } // END AMD LINE ITEM FOREACH LOOP //

                        if (addEngineerNote)
                        {
                            Comment note = ticket.Comments.AddNew();
                            note.ClientName = "Risque System";
                            note.IsInternal = true;
                            note.Text = "Please assign this ticket directly to an engineer.";
                        }

                        if (addVoiceVlanNote)
                        {
                            Comment note = ticket.Comments.AddNew();
                            note.ClientName = "Risque System";
                            note.IsInternal = true;
                            note.Text = "Please verify the voice VLAN for this TR and update links accordingly.";
                        }

                        // Ticket goes to Billing if there it is an account change only.
                        if (isAccountChangeOnly)
                        {
                            //--Update Interface Account Information if the Ticket is an Account Only Change
                            Interface intrface;  // Create Objects
                            LineItem pic = new LineItem();
                            for (var i = 0; i < ticket.LineItems.Count; i++)
                            {

                                pic = ticket.LineItems[i];
                                intrface = Interface.GetByIdentification(pic.InterfaceID);
                                // --- Update Billing Plan & Account Number Interface Data Upon Data Ticket Approval --- //
                                switch (pic.ActionID)
                                {
                                    case 1: // Activate
                                    {
                                        ManageAccounts(pic, intrface);
                                        break;
                                    }
                                    case 2: // Modify
                                    {
                                        ManageAccounts(pic, intrface);
                                        break;
                                    }
                                    case 3: // Deactivate
                                    {
                                        intrface.BillingPlanID = null;
                                        intrface.AccountFund = null;
                                        intrface.AccountCost = null;
                                        intrface.AccountOrder = null;
                                        intrface.AccountWBS = null;
                                        intrface.AccountSIO = null;
                                        intrface.AccountFundCenter = null;
                                        intrface.AccountBusinessPartner = null;
                                        intrface.InterfaceSpeedID = null;
                                        intrface.Save();
                                        break;
                                    }
                                    case 4: // Repair
                                        //No Changes to Billing
                                        break;
                                    default:
                                        continue;
                                }

                            }

                            //If the Billing is Standard ticket goes straight to complete
                            if (changeToStandard)
                            {
                                ticket.StatusID = 5;
                                ticket.EffectiveDate = DateTime.Now;
                            }
                            else if (isStandard)
                            {
                                ticket.StatusID = 6;
                                ticket.EffectiveDate = DateTime.Now;
                            }
                            else
                            {
                                ticket.StatusID = 5;
                                ticket.EffectiveDate = DateTime.Now;
                            }
                        }
                        // Save
                        ticket = ticket.Save();
                        createdTickets.Add(ticket.Identification);
                        // Add to Building Outage Notification List
                        AddToLocationContacts(int.Parse(rowLocationId.Value));
                        //--- Send Email ---//
                        TicketsBusiness.Utility.TicketsMailer.SendMail_CreateTicket(ticket, RisqueContext.CurrentUser);
                    }
                }
                // Iterate through repair line items if they exist
                foreach (DataRow repair in RepairLineItems.Rows)
                {   // Ticket for Repair
                    Ticket ticket = Ticket.NewTicket();

                    // populate contact data and status
                    PopulateTicketGeneralData(ticket);

                    // set as rush priority
                    ticket.PriorityID = 2;

                    // add line item
                    LineItem lineItemPic = ticket.LineItems.AddNew();

                    // populate data from datatable
                    lineItemPic.ActionID    = (int)repair["ActionID"];
                    lineItemPic.Picid       = repair["PICID"].ToString();
                    lineItemPic.InterfaceID = (int)repair["InterfaceID"];
                    lineItemPic.RepairNotes = repair["RepairNotes"].ToString();

                    // Populate Current Settings to PIC
                    AddCurrentSettingsToLine(lineItemPic);

                    // Add Current VLANs
                    LineItemVLAN.SaveCurrentNativeVlan(Interface.GetByIdentification(lineItemPic.InterfaceID), lineItemPic);
                    LineItemVLAN.SaveCurrentTaggedVlans(Interface.GetByIdentification(lineItemPic.InterfaceID), lineItemPic);

                    // Save Repair Notes - To the comments gridview
                    Comment comment    = ticket.Comments.AddNew();
                    comment.ClientName = RisqueContext.CurrentUser.FullName;
                    comment.IsInternal = false;
                    comment.Text       = repair["RepairNotes"].ToString();

                    // Finalize Ticket
                    ticket = ticket.Save();
                    createdTickets.Add(ticket.Identification);

                    //-- add to building outage notification list
                    AddToLocationContacts(Interface.GetByIdentification(lineItemPic.InterfaceID).Device.Room.LocationID);

                    //-- send email
                    TicketsBusiness.Utility.TicketsMailer.SendMail_CreateTicket(ticket, RisqueContext.CurrentUser);
                }
                var ids = string.Empty;
                foreach (int id in createdTickets)
                    ids += id + ",";

                if (createdTickets.Count > 0)
                    ids = ids.Substring(0, ids.Length - 1);

                Response.Redirect("ViewTickets.aspx?created=" + ids, false);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
            }
            else
            {
                ScrollTop();
                alert.ShowBrokenRules();
            }
        }
示例#6
0
        //-- Validate User Input and Values
        private bool VerifyAddLine(TicketsBusiness.Action action)
        {
            // verify data was entered properly
            bool canSave = true;
            Alert alert = new Alert(AddLineBrokenRules);

            if (action.Identification == 1 || action.Identification == 2)
            {
                // activate / modify rules

                // speed is required
                if (ddlSpeed.SelectedIndex == 0)
                {
                    canSave = false;
                    alert.AddError("No Speed", "Speed is a required field.");
                }

                // at least one vlan is required
                if (ddlVLAN.SelectedIndex == 0)
                {
                    canSave = false;
                    alert.AddError("No VLAN", "VLAN is a required field.");
                }

                if (pnlTrunk.Visible)
                {
                    bool dupeVlan = false;
                    foreach (ListItem vlan in lstVLAN.Items)
                    {
                        if (vlan.Selected)
                        {
                            if (ddlVLAN.SelectedIndex > 0 && vlan.Value == ddlVLAN.SelectedValue)
                            {
                                dupeVlan = true;
                                break;
                            }
                        }
                    }
                    if (dupeVlan)
                    {
                        canSave = false;
                        alert.AddError("Duplicate VLAN", "The Native VLAN selected cannot also be selected as a Tagged VLAN. Please ensure all VLAN selections are unique.");
                    }
                }

                // valid account info is required
                if (ddlAccountType.SelectedIndex == 0)
                {
                    canSave = false;
                    alert.AddError("No AccountType", "Account Type is a required field.");
                }
                else
                {
                    if (AcctValidation(alert) == false)
                    {
                        canSave = false;
                    }
                }
            }
            if (!canSave)
                alert.ShowBrokenRules();

            return canSave;
        }
示例#7
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;
 }
示例#8
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();
        }