protected void bindInvoiceDetails(int invoiceID) { List <LeadInvoiceDetail> invoiceDetailLines = null; decimal?totalAmount = 0; invoiceDetailLines = LeadInvoiceDetailManager.GetInvoiceDetails(invoiceID); gvInvoiceLines.DataSource = invoiceDetailLines.OrderBy(x => x.LineDate); gvInvoiceLines.DataBind(); // total invoice lines if (invoiceDetailLines != null && invoiceDetailLines.Count > 0) { totalAmount = invoiceDetailLines.Where(x => x.isBillable == true).Sum(x => x.LineAmount); txtTotalAmount.Text = string.Format("{0:N2}", totalAmount); } }
private void saveInvoice() { string[] billToValues = null; int clientID = 0; int invoiceID = 0; int InvoiceLineID = 0; Data.Entities.LeadInvoice invoice = null; CRM.Data.Entities.LeadPolicy policy = null; LeadInvoiceDetail invoiceDetailLine = null; LeadInvoiceDetail invoiceDetail = null; int nextInvoiceNumber = 0; int policyID = 0; decimal taxAmount = 0; billToValues = ddlBillTo.SelectedValue.Split(new char[] { '|' }); // get invoice id invoiceID = Convert.ToInt32(ViewState["InvoiceID"].ToString()); clientID = Core.SessionHelper.getClientId(); // current policy being edited policyID = Session["policyID"] == null ? 0 : Convert.ToInt32(Session["policyID"]); policy = LeadPolicyManager.GetByID(policyID); if (invoiceID == 0) { invoice = new Data.Entities.LeadInvoice(); // get id for current lead invoice.LeadId = Core.SessionHelper.getLeadId(); invoice.isVoid = false; // assign client invoice.ClientID = clientID; // hide print button //btnPrint.Visible = false; } else { invoice = LeadInvoiceManager.Get(invoiceID); // show print button //btnPrint.Visible = true; } invoice.PolicyID = policy.PolicyType; invoice.InvoiceDate = Convert.ToDateTime(txtInvoiceDate.Text); invoice.DueDate = Convert.ToDateTime(txtDueDate.Text); invoice.BillToName = txtBillTo.Text.Trim(); invoice.BillToAddress1 = txtBillToAddress1.Text.Trim(); invoice.BillToAddress2 = txtBillToAddress2.Text.Trim(); invoice.BillToAddress3 = txtBillToAddress3.Text.Trim(); invoice.AdjusterID = policy.AdjusterID; invoice.AdjusterInvoiceNumber = txtReferenceNumber.Text.Trim(); try { using (TransactionScope scope = new TransactionScope()) { if (invoiceID == 0) { // assign next invoice number to new invoice nextInvoiceNumber = LeadInvoiceManager.GetNextInvoiceNumber(clientID); invoice.InvoiceNumber = nextInvoiceNumber; } invoiceID = LeadInvoiceManager.Save(invoice); // save newly generated invoice id ViewState["InvoiceID"] = invoiceID.ToString(); // check for add/edit invoice detail line InvoiceLineID = ViewState["InvoiceLineID"] == null ? 0 : Convert.ToInt32(ViewState["InvoiceLineID"]); if (InvoiceLineID > 0) { invoiceDetail = LeadInvoiceDetailManager.Get(InvoiceLineID); } else { invoiceDetail = new LeadInvoiceDetail(); } // get detail line from gridview footer if (invoiceDetail != null) { invoiceDetailLine = getInvoiceDetailLine(); if (invoiceDetailLine.LineDate != null && !string.IsNullOrEmpty(invoiceDetailLine.LineDescription) && invoiceDetailLine.Qty > 0 && invoiceDetailLine.Rate > 0) { // update fields invoiceDetail.InvoiceID = invoiceID; invoiceDetail.InvoiceLineID = InvoiceLineID; invoiceDetail.ServiceTypeID = invoiceDetailLine.ServiceTypeID; invoiceDetail.Comments = invoiceDetailLine.Comments; invoiceDetail.isBillable = invoiceDetailLine.isBillable; invoiceDetail.LineAmount = invoiceDetailLine.LineAmount; invoiceDetail.LineDate = invoiceDetailLine.LineDate; invoiceDetail.LineDescription = invoiceDetailLine.LineDescription; invoiceDetail.Qty = invoiceDetailLine.Qty; invoiceDetail.Rate = invoiceDetailLine.Rate; invoiceDetail.UnitDescription = invoiceDetailLine.UnitDescription; invoiceDetail.Total = invoiceDetailLine.Total; // save invoice detail LeadInvoiceDetailManager.Save(invoiceDetail); // clear ViewState["InvoiceLineID"] = "0"; // update invoice total after adding invoice = LeadInvoiceManager.Get(invoiceID); invoice.TotalAmount = invoice.LeadInvoiceDetail.Where(x => x.isBillable == true).Sum(x => x.LineAmount); taxAmount = (invoice.TotalAmount ?? 0) * ((invoice.TaxRate ?? 0) / 100); //invoice.TotalAmount = invoice.TotalAmount + taxAmount; LeadInvoiceManager.Save(invoice); // update comment updateInvoiceComment(invoice, invoiceDetail); } } // complete transaction scope.Complete(); } // refresh invoice detail lines bindInvoiceDetails(invoiceID); clearFields(); showToolbarButtons(); } catch (Exception ex) { lblMessage.Text = "Error while saving invoice."; lblMessage.CssClass = "error"; Core.EmailHelper.emailError(ex); } }
// process gridview commands protected void gvInvoiceLines_RowCommand(object sender, GridViewCommandEventArgs e) { int invoiceID = 0; int invoiceLineID = 0; CRM.Data.Entities.LeadInvoiceDetail invoiceLine = null; TextBox txtLineAmount; switch (e.CommandName) { case "DoEdit": invoiceLineID = Convert.ToInt32(e.CommandArgument); invoiceLine = LeadInvoiceDetailManager.Get(invoiceLineID); if (invoiceLine != null) { ViewState["InvoiceLineID"] = invoiceLineID.ToString(); // date WebDatePicker txtDate = gvInvoiceLines.FooterRow.FindControl("txtDate") as WebDatePicker; if (txtDate != null && invoiceLine.LineDate != null) { txtDate.Text = string.Format("{0:MM/dd/yyyy}", invoiceLine.LineDate); } // service description DropDownList cbx = gvInvoiceLines.FooterRow.FindControl("cbxServiceDescription") as DropDownList; if (cbx != null && invoiceLine.ServiceTypeID != null) { ListItem item = cbx.Items.FindByText(invoiceLine.LineDescription.Trim()); if (item != null) { cbx.SelectedIndex = cbx.Items.IndexOf(item); } } else { ListItem item = new ListItem(invoiceLine.LineDescription, invoiceLine.LineDescription); cbx.Items.Add(item); cbx.Text = invoiceLine.LineDescription; } // quantity WebNumericEditor txtQty = gvInvoiceLines.FooterRow.FindControl("txtQty") as WebNumericEditor; if (txtQty != null && invoiceLine.Qty != null) { txtQty.Text = invoiceLine.Qty.ToString(); } // rate WebNumericEditor txtRate = gvInvoiceLines.FooterRow.FindControl("txtRate") as WebNumericEditor; if (txtRate != null && invoiceLine.InvoiceServiceType != null && invoiceLine.InvoiceServiceType.ServiceRate != null) { txtRate.Text = invoiceLine.InvoiceServiceType.ServiceRate.ToString(); } // service unit Label lblUnitDescription = gvInvoiceLines.FooterRow.FindControl("lblUnitDescription") as Label; if (lblUnitDescription != null && invoiceLine.InvoiceServiceType != null && invoiceLine.InvoiceServiceType.InvoiceServiceUnit != null) { lblUnitDescription.Text = invoiceLine.InvoiceServiceType.InvoiceServiceUnit.UnitDescription; } // total amount txtLineAmount = gvInvoiceLines.FooterRow.FindControl("txtLineAmount") as TextBox; if (txtLineAmount != null) { txtLineAmount.Text = string.Format("{0:N2}", invoiceLine.LineAmount ?? 0); } //billable CheckBox cbxBillable = gvInvoiceLines.FooterRow.FindControl("cbxBillable") as CheckBox; if (cbxBillable != null && invoiceLine.isBillable != null) { cbxBillable.Checked = invoiceLine.isBillable ?? false; } // comments WebTextEditor txtComments = gvInvoiceLines.FooterRow.FindControl("txtComments") as WebTextEditor; if (txtComments != null && invoiceLine.Comments != null) { txtComments.Text = invoiceLine.Comments; } // show cancel icon ImageButton ibtnCancel = gvInvoiceLines.FooterRow.FindControl("ibtnCancel") as ImageButton; ibtnCancel.Visible = true; } break; case "DoDelete": invoiceLineID = Convert.ToInt32(e.CommandArgument); if (invoiceLineID > 0) { using (TransactionScope scope = new TransactionScope()) { try { LeadInvoiceDetailManager.Delete(invoiceLineID); deleteInvoiceComment(invoiceLineID); invoiceID = Convert.ToInt32(ViewState["InvoiceID"].ToString()); bindInvoiceDetails(invoiceID); // complete transaction scope.Complete(); } catch (Exception ex) { lblMessage.Text = "Error while deleting invoice detail line."; lblMessage.CssClass = "error"; Core.EmailHelper.emailError(ex); } } } break; } }
//protected void bindInvoiceLines() { // int invoiceID = 0; // List<LeadInvoiceDetail> invoiceDetailLines = null; // invoiceID = Convert.ToInt32(hf_invoiceID.Value); // invoiceDetailLines = LeadInvoiceDetailManager.GetInvoiceDetails(invoiceID); // gvInvoiceLines.DataSource = invoiceDetailLines; // gvInvoiceLines.DataBind(); //} private void calculateLineTotal() { int invoiceID = 0; decimal qty = 0; decimal rate = 0; decimal totalAmount = 0; decimal taxableTotal = 0; string unitDescription = null; List <LeadInvoiceDetail> invoiceDetails = null; // get service unit type Label lblUnitDescription = gvInvoiceLines.FooterRow.FindControl("lblUnitDescription") as Label; if (lblUnitDescription != null) { unitDescription = lblUnitDescription.Text; } // get quantity WebNumericEditor txtQty = gvInvoiceLines.FooterRow.FindControl("txtQty") as WebNumericEditor; if (txtQty != null) { qty = txtQty.Value == null ? 0 : Convert.ToDecimal(txtQty.Value); } // rate WebNumericEditor txtRate = gvInvoiceLines.FooterRow.FindControl("txtRate") as WebNumericEditor; // remove any % symbol if (txtRate != null) { rate = txtRate.Value == null ? 0 : Convert.ToDecimal(txtRate.Value); } if (!string.IsNullOrEmpty(unitDescription) && unitDescriptions.Contains(unitDescription.ToLower())) { rate /= 100; // make it a percent for "percentage, sales tax" } totalAmount = rate * qty; if (!string.IsNullOrEmpty(unitDescription) && unitDescription.ToLower().Equals("sales tax")) { int.TryParse(ViewState["InvoiceID"].ToString(), out invoiceID); invoiceDetails = LeadInvoiceDetailManager.GetInvoiceDetails(invoiceID); taxableTotal = (decimal)invoiceDetails.Where(x => x.isBillable == true && x.InvoiceServiceType.InvoiceServiceUnit.UnitID != SALES_TAX_ID) .Sum(x => x.LineAmount); totalAmount = taxableTotal * rate; } TextBox txtLineAmount = gvInvoiceLines.FooterRow.FindControl("txtLineAmount") as TextBox; if (txtLineAmount != null) { txtLineAmount.Text = totalAmount.ToString("N2"); } }