protected void btnCancel_Click(object sender, EventArgs e)
        {
            int periodId = Convert.ToInt32(Request.QueryString["ID"]);
            PayPeriod pp = new PayPeriod();
            using (var db = new RentBikeEntities())
            {
                var item = db.PayPeriods.FirstOrDefault(s => s.ID == periodId);
                pp = item;
            }

            Response.Redirect(string.Format("FormContractUpdate.aspx?ID={0}", pp.CONTRACT_ID));
        }
Beispiel #2
0
        private void LoadGrid(PayPeriod pp)
        {
            List <InOut> payList = new List <InOut>();

            using (var db = new RentBikeEntities())
            {
                var itemLst = db.InOuts.Where(s => s.PERIOD_ID == pp.ID && s.IN_AMOUNT != 0).ToList();

                rptContractInOut.DataSource = itemLst;
                rptContractInOut.DataBind();
            }
        }
Beispiel #3
0
        protected void btnCancel_Click(object sender, EventArgs e)
        {
            int       periodId = Convert.ToInt32(Request.QueryString["ID"]);
            PayPeriod pp       = new PayPeriod();

            using (var db = new RentBikeEntities())
            {
                var item = db.PayPeriods.FirstOrDefault(s => s.ID == periodId);
                pp = item;
            }

            Response.Redirect(string.Format("FormContractUpdate.aspx?ID={0}", pp.CONTRACT_ID));
        }
Beispiel #4
0
        protected override void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);
            if (!IsPostBack)
            {
                // LOAD PAYPERIOD
                int       periodId = Convert.ToInt32(Request.QueryString["ID"]);
                PayPeriod pp       = new PayPeriod();
                using (var db = new RentBikeEntities())
                {
                    var item = db.PayPeriods.Where(s => s.ID == periodId).FirstOrDefault();
                    pp         = item;
                    PeriodDate = item.PAY_DATE;
                }

                LoadGrid(pp);
                LoadPaidAmountAndTheLeft(pp);
                // DISPLAY SREEN
                hplContract.NavigateUrl = string.Format("FormContractUpdate.aspx?ID={0}", pp.CONTRACT_ID);
                hplContract.Text        = "Xem chi tiết hợp đồng";

                Store st = new Store();
                using (var db = new RentBikeEntities())
                {
                    var contract = db.Contracts.Where(c => c.ID == pp.CONTRACT_ID).FirstOrDefault();
                    if (contract != null)
                    {
                        STORE_ID = contract.STORE_ID;
                        var item = db.Stores.Where(s => s.ID == contract.STORE_ID).FirstOrDefault();
                        if (item != null)
                        {
                            st               = item;
                            txtStore.Text    = st.NAME;
                            txtStore.Enabled = false;
                        }

                        var customer = db.Customers.FirstOrDefault(c => c.ID == contract.CUSTOMER_ID);
                        if (customer != null)
                        {
                            CustomerName = customer.NAME;
                        }
                    }
                }

                using (var db = new RentBikeEntities())
                {
                    var item      = db.CONTRACT_FULL_VW.FirstOrDefault(itm => itm.ID == pp.CONTRACT_ID && itm.ACTIVE == true);
                    int inoutType = 0;
                    switch (item.RENT_TYPE_NAME)
                    {
                    case "Cho thuê xe":
                        inoutType = 14;
                        break;

                    case "Cho thuê thiết bị văn phòng":
                        inoutType = 15;
                        break;

                    case "Cho thuê mặt hàng khác":
                        inoutType = 16;
                        break;
                    }

                    var inouttypelist = db.InOutTypes.Where(s => s.IS_CONTRACT == true && s.ACTIVE == true).ToList();

                    ddInOutType.DataSource     = inouttypelist;
                    ddInOutType.DataTextField  = "NAME";
                    ddInOutType.DataValueField = "ID";
                    ddInOutType.DataBind();
                    ddInOutType.SelectedValue = inoutType.ToString();

                    //txtIncome.Text = pp.ACTUAL_PAY.ToString();

                    //
                }
            }
            //Disable UI for Admin account
            if (IS_ADMIN)
            {
                pnlTable.Enabled = false;
            }
        }
Beispiel #5
0
        private void LoadPaidAmountAndTheLeft(PayPeriod pp)
        {
            List <InOut>     lst             = new List <InOut>();
            List <PayPeriod> lst1            = new List <PayPeriod>();
            decimal          total           = 0;
            decimal          remain          = 0;
            decimal          amountLeft      = 0;
            decimal          totalAmountLeft = 0;

            using (var db = new RentBikeEntities())
            {
                var result = db.InOuts.Where(itm => itm.CONTRACT_ID == pp.CONTRACT_ID && itm.PERIOD_ID == pp.ID).ToList();
                foreach (InOut io in result)
                {
                    total += io.IN_AMOUNT;
                    total -= io.OUT_AMOUNT;
                }

                var lstPeriod = db.PayPeriods.Where(c => c.CONTRACT_ID == pp.CONTRACT_ID).ToList();
                if (lstPeriod != null)
                {
                    if (pp.ID == lstPeriod[0].ID)
                    {
                        remain = 0;
                    }
                    else
                    {
                        decimal totalPerAmount = 0;
                        decimal totalActualPay = 0;
                        foreach (PayPeriod pay in lstPeriod)
                        {
                            if (pay.ID < pp.ID)
                            {
                                totalPerAmount = totalPerAmount + pay.AMOUNT_PER_PERIOD;
                                totalActualPay = totalActualPay + pay.ACTUAL_PAY;
                            }
                        }
                        if (totalActualPay > totalPerAmount)
                        {
                            remain = totalActualPay - totalPerAmount;
                        }
                    }

                    decimal totalAmountPeriod = lstPeriod.Where(c => c.PAY_DATE <= DateTime.Today).Select(c => c.AMOUNT_PER_PERIOD).DefaultIfEmpty(0).Sum();
                    decimal totalAmountPaid   = lstPeriod.Where(c => c.PAY_DATE <= DateTime.Today).Select(c => c.ACTUAL_PAY).DefaultIfEmpty(0).Sum();
                    totalAmountLeft = totalAmountPeriod - totalAmountPaid <= 0 ? 0 : totalAmountPeriod - totalAmountPaid;
                }

                if (pp.AMOUNT_PER_PERIOD - total > 0)
                {
                    amountLeft = pp.AMOUNT_PER_PERIOD - total - remain <= 0 ? 0 : pp.AMOUNT_PER_PERIOD - total - remain;
                }
            }

            Label lblAmountPerDay = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblAmountPerDay");

            lblAmountPerDay.Text = string.Format("{0:0,0}", pp.AMOUNT_PER_PERIOD);
            Label lblTotalPaid = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblTotalPaid");

            lblTotalPaid.Text = string.Format("{0:0,0}", total);
            Label lblAmountRemain = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblAmountRemain");

            lblAmountRemain.Text = string.Format("{0:0,0}", remain);
            Label lblAmountLeft = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblAmountLeft");

            lblAmountLeft.Text = txtIncome.Text = string.Format("{0:0,0}", amountLeft);
            Label lblTotalAmoutLeft = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblTotalAmoutLeft");

            lblTotalAmoutLeft.Text = string.Format("{0:0,0}", totalAmountLeft);
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    string id = Request.QueryString["ID"];
                    string copy = Request.QueryString["copy"];
                    string result = ValidateFields();
                    int cusid = 0;

                    if (!string.IsNullOrEmpty(result))
                    {
                        lblMessage.Text = result;
                        return;
                    }

                    if (string.IsNullOrEmpty(id) || (!string.IsNullOrEmpty(copy) && copy == "1")) // NEW
                    {
                        Contract contract = CommonList.GetContractByLicenseNo(txtLicenseNumber.Text.Trim());
                        if (contract != null)
                        {
                            // Initialize StringWriter instance.
                            StringWriter stringWriter = new StringWriter();
                            // Put HtmlTextWriter in using block because it needs to call Dispose.
                            using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
                            {
                                writer.Write("Số CMTND/GPLX này hiện tại đã đăng ký hợp đồng ");
                                writer.AddAttribute(HtmlTextWriterAttribute.Href, string.Format("FormContractUpdate.aspx?ID={0}&sID={1}", contract.ID, contract.STORE_ID));
                                writer.RenderBeginTag(HtmlTextWriterTag.A); // Start of A
                                writer.Write(contract.CONTRACT_NO);
                                writer.RenderEndTag();  //End of A

                                lblMessage.Text = stringWriter.ToString();
                                return;
                            }

                        }
                        Customer cusItem = null;
                        using (var db = new RentBikeEntities())
                        {
                            bool IsNewCust = false;
                            cusItem = db.Customers.FirstOrDefault(c => c.LICENSE_NO == txtLicenseNumber.Text.Trim() && c.NAME == txtCustomerName.Text.Trim());
                            if (cusItem == null)
                            {
                                IsNewCust = true;
                                cusItem = new Customer();
                            }

                            cusItem.NAME = txtCustomerName.Text.Trim();
                            cusItem.BIRTH_DAY = DateTime.ParseExact(txtBirthDay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            cusItem.LICENSE_NO = txtLicenseNumber.Text.Trim();
                            cusItem.LICENSE_RANGE_DATE = DateTime.ParseExact(txtRangeDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            cusItem.LICENSE_RANGE_PLACE = txtPlaceDate.Text.Trim();
                            cusItem.PHONE = txtPhone.Text.Trim();
                            cusItem.PERMANENT_RESIDENCE = txtPermanentResidence.Text.Trim();
                            cusItem.CURRENT_RESIDENCE = txtCurrentResidence.Text.Trim();

                            if (IsNewCust)
                            {
                                db.Customers.Add(cusItem);
                            }
                            db.SaveChanges();
                            cusid = cusItem.ID;
                        }

                        // New Contract
                        Contract item = new Contract();
                        item.RENT_TYPE_ID = Convert.ToInt32(ddlRentType.SelectedValue);
                        item.FEE_PER_DAY = Math.Round(Convert.ToDecimal(txtFeePerDay.Text.Replace(",", string.Empty)));
                        if (!string.IsNullOrEmpty(txtRentDate.Text))
                        {
                            item.RENT_DATE = DateTime.ParseExact(txtRentDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        }
                        else
                            item.RENT_DATE = DateTime.Now;

                        if (!string.IsNullOrEmpty(txtEndDate.Text))
                        {
                            item.END_DATE = DateTime.ParseExact(txtEndDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        }
                        else
                            item.END_DATE = item.RENT_DATE.AddDays(29);
                        item.EXTEND_END_DATE = item.END_DATE;
                        item.CLOSE_CONTRACT_DATE = new DateTime(1, 1, 1);
                        item.PAY_FEE_MESSAGE = string.Empty;
                        item.NOTE = txtNote.Text;
                        item.REFERENCE_ID = -1;
                        item.REFERENCE_NAME = txtReferencePerson.Text.Trim();
                        item.ITEM_TYPE = txtItemName.Text.Trim();
                        item.ITEM_LICENSE_NO = txtItemLicenseNo.Text.Trim();
                        item.SERIAL_1 = txtSerial1.Text.Trim();
                        item.SERIAL_2 = txtSerial2.Text.Trim();
                        item.REFERENCE_PHONE = txtReferencePhone.Text.Trim();
                        item.SCHOOL_NAME = txtSchool.Text.Trim();
                        item.CLASS_NAME = txtClass.Text.Trim();
                        item.IMPLEMENTER = txtImplementer.Text.Trim();
                        item.BACK_TO_DOCUMENTS = txtBackDocument.Text.Trim();
                        item.DETAIL = txtItemDetail.Text.Trim();
                        item.CUSTOMER_ID = cusid;
                        item.CONTRACT_STATUS = true;
                        item.CONTRACT_AMOUNT = Convert.ToDecimal(txtAmount.Text.Replace(",", string.Empty));
                        item.CREATED_BY = Session["username"].ToString();
                        item.CREATED_DATE = DateTime.Now;
                        item.UPDATED_BY = Session["username"].ToString();
                        item.UPDATED_DATE = DateTime.Now;
                        //item.CONTRACT_NO = txtContractNo.Text.Trim();
                        if (ddlStore.Enabled == true)
                            item.STORE_ID = Convert.ToInt32(ddlStore.SelectedValue);
                        else
                            item.STORE_ID = Convert.ToInt32(Session["store_id"]);
                        item.SEARCH_TEXT = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                                        txtCustomerName.Text.Trim(),
                                                        txtBirthDay.Text.Trim(),
                                                        txtLicenseNumber.Text.Trim(),
                                                        txtRangeDate.Text.Trim(),
                                                        txtPermanentResidence.Text.Trim(),
                                                        txtCurrentResidence.Text.Trim(),
                                                        txtPhone.Text.Trim(),
                                                        item.CONTRACT_NO,
                                                        item.RENT_DATE.ToString("dd/MM/yyyy"));
                        SavePhoto(item);
                        using (var db = new RentBikeEntities())
                        {
                            db.Contracts.Add(item);
                            db.SaveChanges();

                            DateTime periodTime = DateTime.Today;
                            if (!string.IsNullOrEmpty(txtRentDate.Text))
                            {
                                periodTime = DateTime.ParseExact(txtRentDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            }
                            PayPeriod newPeriod = new PayPeriod();
                            newPeriod.PAY_DATE = periodTime;
                            CommonList.CreatePayPeriod(db, item.ID, newPeriod, true);
                        }

                        InOut io = new InOut();
                        io.CONTRACT_ID = item.ID;
                        io.IN_AMOUNT = 0;
                        io.OUT_AMOUNT = Convert.ToDecimal(txtAmount.Text);
                        io.RENT_TYPE_ID = Convert.ToInt32(ddlRentType.SelectedValue);
                        io.PERIOD_DATE = DateTime.Now;
                        io.MORE_INFO = string.Format("Cho khách {0} thuê: {1} ngày {2} trị giá {3}", txtCustomerName.Text.Trim(), txtItemName.Text.Trim(), DateTime.Now.ToString("dd/MM/yyyy"), txtAmount.Text.Trim());
                        if (ddlStore.Enabled == true)
                            io.STORE_ID = Convert.ToInt32(ddlStore.SelectedValue);
                        else
                            io.STORE_ID = Convert.ToInt32(Session["store_id"]);
                        io.SEARCH_TEXT = string.Format("{0} ", io.MORE_INFO);
                        io.INOUT_DATE = DateTime.Now;
                        io.CREATED_BY = Session["username"].ToString();
                        io.CREATED_DATE = DateTime.Now;
                        io.UPDATED_BY = Session["username"].ToString();
                        io.UPDATED_DATE = DateTime.Now;
                        io.INOUT_TYPE_ID = CommonList.GetInoutTypeFromRentType(Helper.parseInt(ddlRentType.SelectedValue));

                        using (var rbdb = new RentBikeEntities())
                        {
                            rbdb.InOuts.Add(io);
                            rbdb.SaveChanges();

                            CommonList.AutoExtendPeriod(rbdb, item.ID);
                        }
                        string message = string.Format("Tài khoản {0} cửa hàng {1} thực hiện làm hợp đồng cho khách hàng {2} vào lúc {3}", Convert.ToString(Session["username"]), STORE_NAME, cusItem.NAME, DateTime.Now);
                        Helper.WriteLog(Convert.ToString(Session["username"]), STORE_NAME, Constants.ACTION_CREATE_CONTRACT, message, false);
                        ts.Complete();
                    }
                    else // EDIT
                    {

                        result = ValidatePermission();
                        if (!string.IsNullOrEmpty(result))
                        {
                            lblMessage.Text = result;
                            return;
                        }

                        int contractId = Helper.parseInt(id);
                        bool bUpdateInOutAndPeriod = false;
                        using (var db = new RentBikeEntities())
                        {
                            var item = db.Contracts.FirstOrDefault(itm => itm.ID == contractId);
                            int rentTypeId = Helper.parseInt(ddlRentType.SelectedValue);
                            decimal contractAmount = Convert.ToDecimal(txtAmount.Text);
                            decimal feePerDay = Convert.ToDecimal(txtFeePerDay.Text);

                            if (contractAmount != item.CONTRACT_AMOUNT || rentTypeId != item.RENT_TYPE_ID || feePerDay != item.FEE_PER_DAY)
                                bUpdateInOutAndPeriod = true;

                            if (bUpdateInOutAndPeriod)
                            {
                                //Update for contract record only.
                                int inOutTypeId = CommonList.GetInoutTypeFromRentType(item.RENT_TYPE_ID);
                                var inOut = db.InOuts.FirstOrDefault(c => c.CONTRACT_ID == contractId && c.INOUT_TYPE_ID == inOutTypeId);
                                if (inOut != null)
                                {
                                    // SAVE INOUT
                                    inOut.OUT_AMOUNT = contractAmount;
                                    inOut.RENT_TYPE_ID = rentTypeId;
                                    inOut.INOUT_TYPE_ID = CommonList.GetInoutTypeFromRentType(rentTypeId);
                                    inOut.MORE_INFO = inOut.SEARCH_TEXT = string.Format("Cho khách {0} thuê: {1} ngày {2} trị giá {3}", txtCustomerName.Text.Trim(), txtItemName.Text.Trim(), DateTime.Now.ToString("dd/MM/yyyy"), txtAmount.Text.Trim());
                                    inOut.UPDATED_BY = Session["username"].ToString();
                                    inOut.UPDATED_DATE = DateTime.Now;
                                }

                                //Update for others in out record of the contract
                                var listInOut = db.InOuts.Where(c => c.CONTRACT_ID == contractId && c.RENT_TYPE_ID == item.RENT_TYPE_ID).ToList();
                                foreach (var io in listInOut)
                                {
                                    io.RENT_TYPE_ID = rentTypeId;
                                    io.UPDATED_BY = Session["username"].ToString();
                                    io.UPDATED_DATE = DateTime.Now;
                                }

                                //Update for 3 first PayPeriod records
                                List<PayPeriod> listPayPeriod = db.PayPeriods.Where(c => c.CONTRACT_ID == contractId).ToList();
                                foreach (var pp in listPayPeriod.Take(3))
                                {
                                    pp.AMOUNT_PER_PERIOD = feePerDay * 10;
                                }

                                //Update for remain PayPeriod records
                                int multipleFee = Convert.ToInt32(Decimal.Floor(contractAmount / 100000));
                                decimal increateFeeCar = (feePerDay * 10) + (multipleFee * 50 * 10);
                                decimal increateFeeEquip = (feePerDay * 10) + (multipleFee * 100 * 10);
                                decimal increateFeeOther = (feePerDay * 10);
                                foreach (var pp in listPayPeriod.Skip(3))
                                {
                                    switch (rentTypeId)
                                    {
                                        case 1:
                                            if (((feePerDay / multipleFee) * 10) < 4000)
                                                pp.AMOUNT_PER_PERIOD = increateFeeCar;
                                            else
                                                pp.AMOUNT_PER_PERIOD = feePerDay * 10;
                                            break;
                                        case 2:
                                            if (((feePerDay / multipleFee) * 10) < 6000)
                                                pp.AMOUNT_PER_PERIOD = increateFeeEquip;
                                            else
                                                pp.AMOUNT_PER_PERIOD = feePerDay * 10;
                                            break;
                                        default:
                                            pp.AMOUNT_PER_PERIOD = increateFeeOther;
                                            break;
                                    }
                                }
                            }

                            //Update contract infor
                            item.NOTE = txtNote.Text;
                            item.REFERENCE_ID = -1;
                            item.REFERENCE_NAME = txtReferencePerson.Text.Trim();
                            item.ITEM_TYPE = txtItemName.Text.Trim();
                            item.ITEM_LICENSE_NO = txtItemLicenseNo.Text.Trim();
                            item.RENT_TYPE_ID = Helper.parseInt(ddlRentType.SelectedValue);
                            item.CONTRACT_AMOUNT = Convert.ToDecimal(txtAmount.Text);
                            item.FEE_PER_DAY = Convert.ToDecimal(txtFeePerDay.Text);
                            item.SERIAL_1 = txtSerial1.Text.Trim();
                            item.SERIAL_2 = txtSerial2.Text.Trim();
                            item.REFERENCE_PHONE = txtReferencePhone.Text.Trim();
                            item.SCHOOL_NAME = txtSchool.Text.Trim();
                            item.CLASS_NAME = txtClass.Text.Trim();
                            item.IMPLEMENTER = txtImplementer.Text.Trim();
                            item.BACK_TO_DOCUMENTS = txtBackDocument.Text.Trim();
                            item.DETAIL = txtItemDetail.Text.Trim();
                            item.SEARCH_TEXT = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                                        txtCustomerName.Text.Trim(),
                                                        txtBirthDay.Text.Trim(),
                                                        txtLicenseNumber.Text.Trim(),
                                                        txtRangeDate.Text.Trim(),
                                                        txtPermanentResidence.Text.Trim(),
                                                        txtCurrentResidence.Text.Trim(),
                                                        txtPhone.Text.Trim(),
                                                        item.CONTRACT_NO,
                                                        item.RENT_DATE.ToString("dd/MM/yyyy"));

                            item.UPDATED_BY = Session["username"].ToString();
                            item.UPDATED_DATE = DateTime.Now;
                            //Contract photo
                            SavePhoto(item);
                            //Update customer infor
                            var cusItem = db.Customers.FirstOrDefault(c => c.ID == item.CUSTOMER_ID);
                            if (cusItem != null)
                            {
                                cusItem.NAME = txtCustomerName.Text.Trim();
                                cusItem.BIRTH_DAY = DateTime.ParseExact(txtBirthDay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                cusItem.LICENSE_NO = txtLicenseNumber.Text.Trim();
                                cusItem.LICENSE_RANGE_DATE = DateTime.ParseExact(txtRangeDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                cusItem.LICENSE_RANGE_PLACE = txtPlaceDate.Text.Trim();
                                cusItem.PHONE = txtPhone.Text.Trim();
                                cusItem.PERMANENT_RESIDENCE = txtPermanentResidence.Text.Trim();
                                cusItem.CURRENT_RESIDENCE = txtCurrentResidence.Text.Trim();
                            }

                            db.SaveChanges();

                            string message = string.Format("Tài khoản {0} cửa hàng {1} thực hiện chỉnh sửa hợp đồng của khách hàng {2} vào lúc {3}", Convert.ToString(Session["username"]), STORE_NAME, cusItem.NAME, DateTime.Now);
                            Helper.WriteLog(Convert.ToString(Session["username"]), STORE_NAME, Constants.ACTION_UPDATE_CONTRACT, message, false);
                        }
                        ts.Complete();
                    }
                    Response.Redirect("FormContractManagement.aspx", false);
                }
            }
            catch (Exception ex)
            {
                lblMessage.Text = ex.Message;
                lblMessage.CssClass = "text-center text-danger";
                Logger.Log(ex.Message);
            }
        }
        protected override void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);
            if (!IsPostBack)
            {
                // LOAD PAYPERIOD
                int periodId = Convert.ToInt32(Request.QueryString["ID"]);
                PayPeriod pp = new PayPeriod();
                using (var db = new RentBikeEntities())
                {
                    var item = db.PayPeriods.Where(s => s.ID == periodId).FirstOrDefault();
                    pp = item;
                    PeriodDate = item.PAY_DATE;
                }

                LoadGrid(pp);
                LoadPaidAmountAndTheLeft(pp);
                // DISPLAY SREEN
                hplContract.NavigateUrl = string.Format("FormContractUpdate.aspx?ID={0}", pp.CONTRACT_ID);
                hplContract.Text = "Xem chi tiết hợp đồng";

                Store st = new Store();
                using (var db = new RentBikeEntities())
                {
                    var contract = db.Contracts.Where(c => c.ID == pp.CONTRACT_ID).FirstOrDefault();
                    if (contract != null)
                    {
                        STORE_ID = contract.STORE_ID;
                        var item = db.Stores.Where(s => s.ID == contract.STORE_ID).FirstOrDefault();
                        if (item != null)
                        {
                            st = item;
                            txtStore.Text = st.NAME;
                            txtStore.Enabled = false;
                        }

                        var customer = db.Customers.FirstOrDefault(c =>c.ID == contract.CUSTOMER_ID);
                        if (customer != null) CustomerName = customer.NAME;
                    }
                }

                using (var db = new RentBikeEntities())
                {
                    var item = db.CONTRACT_FULL_VW.FirstOrDefault(itm => itm.ID == pp.CONTRACT_ID && itm.ACTIVE == true);
                    int inoutType = 0;
                    switch (item.RENT_TYPE_NAME)
                    {
                        case "Cho thuê xe":
                            inoutType = 14;
                            break;
                        case "Cho thuê thiết bị văn phòng":
                            inoutType = 15;
                            break;
                        case "Cho thuê mặt hàng khác":
                            inoutType = 16;
                            break;
                    }

                    var inouttypelist = db.InOutTypes.Where(s => s.IS_CONTRACT == true && s.ACTIVE == true).ToList();

                    ddInOutType.DataSource = inouttypelist;
                    ddInOutType.DataTextField = "NAME";
                    ddInOutType.DataValueField = "ID";
                    ddInOutType.DataBind();
                    ddInOutType.SelectedValue = inoutType.ToString();

                    //txtIncome.Text = pp.ACTUAL_PAY.ToString();

                    //
                }
            }
            //Disable UI for Admin account
            if (IS_ADMIN) pnlTable.Enabled = false;
        }
        private void LoadPaidAmountAndTheLeft(PayPeriod pp)
        {
            List<InOut> lst = new List<InOut>();
            List<PayPeriod> lst1 = new List<PayPeriod>();
            decimal total = 0;
            decimal remain = 0;
            decimal amountLeft = 0;
            decimal totalAmountLeft = 0;
            using (var db = new RentBikeEntities())
            {
                var result = db.InOuts.Where(itm => itm.CONTRACT_ID == pp.CONTRACT_ID && itm.PERIOD_ID == pp.ID).ToList();
                foreach (InOut io in result)
                {
                    total += io.IN_AMOUNT;
                    total -= io.OUT_AMOUNT;
                }

                var lstPeriod = db.PayPeriods.Where(c => c.CONTRACT_ID == pp.CONTRACT_ID).ToList();
                if (lstPeriod != null)
                {
                    if (pp.ID == lstPeriod[0].ID)
                    {
                        remain = 0;
                    }
                    else
                    {
                        decimal totalPerAmount = 0;
                        decimal totalActualPay = 0;
                        foreach (PayPeriod pay in lstPeriod)
                        {
                            if (pay.ID < pp.ID)
                            {
                                totalPerAmount = totalPerAmount + pay.AMOUNT_PER_PERIOD;
                                totalActualPay = totalActualPay + pay.ACTUAL_PAY;
                            }
                        }
                        if (totalActualPay > totalPerAmount)
                            remain = totalActualPay - totalPerAmount;
                    }

                    decimal totalAmountPeriod = lstPeriod.Where(c => c.PAY_DATE <= DateTime.Today).Select(c => c.AMOUNT_PER_PERIOD).DefaultIfEmpty(0).Sum();
                    decimal totalAmountPaid = lstPeriod.Where(c => c.PAY_DATE <= DateTime.Today).Select(c => c.ACTUAL_PAY).DefaultIfEmpty(0).Sum();
                    totalAmountLeft = totalAmountPeriod - totalAmountPaid <= 0 ? 0 : totalAmountPeriod - totalAmountPaid;
                }

                if (pp.AMOUNT_PER_PERIOD - total > 0)
                {
                    amountLeft = pp.AMOUNT_PER_PERIOD - total - remain <= 0 ? 0 : pp.AMOUNT_PER_PERIOD - total - remain;
                }
            }

            Label lblAmountPerDay = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblAmountPerDay");
            lblAmountPerDay.Text = string.Format("{0:0,0}", pp.AMOUNT_PER_PERIOD);
            Label lblTotalPaid = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblTotalPaid");
            lblTotalPaid.Text = string.Format("{0:0,0}", total);
            Label lblAmountRemain = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblAmountRemain");
            lblAmountRemain.Text = string.Format("{0:0,0}", remain);
            Label lblAmountLeft = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblAmountLeft");
            lblAmountLeft.Text = txtIncome.Text = string.Format("{0:0,0}", amountLeft);
            Label lblTotalAmoutLeft = (Label)rptContractInOut.Controls[rptContractInOut.Controls.Count - 1].Controls[0].FindControl("lblTotalAmoutLeft");
            lblTotalAmoutLeft.Text = string.Format("{0:0,0}", totalAmountLeft);
        }
        private void LoadGrid(PayPeriod pp)
        {
            List<InOut> payList = new List<InOut>();
            using (var db = new RentBikeEntities())
            {
                var itemLst = db.InOuts.Where(s => s.PERIOD_ID == pp.ID && s.IN_AMOUNT != 0).ToList();

                rptContractInOut.DataSource = itemLst;
                rptContractInOut.DataBind();
            }
        }
Beispiel #10
0
        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    string id     = Request.QueryString["ID"];
                    string copy   = Request.QueryString["copy"];
                    string result = ValidateFields();
                    int    cusid  = 0;

                    if (!string.IsNullOrEmpty(result))
                    {
                        lblMessage.Text = result;
                        return;
                    }

                    if (string.IsNullOrEmpty(id) || (!string.IsNullOrEmpty(copy) && copy == "1")) // NEW
                    {
                        Contract contract = CommonList.GetContractByLicenseNo(txtLicenseNumber.Text.Trim());
                        if (contract != null)
                        {
                            // Initialize StringWriter instance.
                            StringWriter stringWriter = new StringWriter();
                            // Put HtmlTextWriter in using block because it needs to call Dispose.
                            using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
                            {
                                writer.Write("Số CMTND/GPLX này hiện tại đã đăng ký hợp đồng ");
                                writer.AddAttribute(HtmlTextWriterAttribute.Href, string.Format("FormContractUpdate.aspx?ID={0}&sID={1}", contract.ID, contract.STORE_ID));
                                writer.RenderBeginTag(HtmlTextWriterTag.A); // Start of A
                                writer.Write(contract.CONTRACT_NO);
                                writer.RenderEndTag();                      //End of A

                                lblMessage.Text = stringWriter.ToString();
                                return;
                            }
                        }
                        Customer cusItem = null;
                        using (var db = new RentBikeEntities())
                        {
                            bool IsNewCust = false;
                            cusItem = db.Customers.FirstOrDefault(c => c.LICENSE_NO == txtLicenseNumber.Text.Trim() && c.NAME == txtCustomerName.Text.Trim());
                            if (cusItem == null)
                            {
                                IsNewCust = true;
                                cusItem   = new Customer();
                            }

                            cusItem.NAME                = txtCustomerName.Text.Trim();
                            cusItem.BIRTH_DAY           = DateTime.ParseExact(txtBirthDay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            cusItem.LICENSE_NO          = txtLicenseNumber.Text.Trim();
                            cusItem.LICENSE_RANGE_DATE  = DateTime.ParseExact(txtRangeDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            cusItem.LICENSE_RANGE_PLACE = txtPlaceDate.Text.Trim();
                            cusItem.PHONE               = txtPhone.Text.Trim();
                            cusItem.PERMANENT_RESIDENCE = txtPermanentResidence.Text.Trim();
                            cusItem.CURRENT_RESIDENCE   = txtCurrentResidence.Text.Trim();

                            if (IsNewCust)
                            {
                                db.Customers.Add(cusItem);
                            }
                            db.SaveChanges();
                            cusid = cusItem.ID;
                        }

                        // New Contract
                        Contract item = new Contract();
                        item.RENT_TYPE_ID = Convert.ToInt32(ddlRentType.SelectedValue);
                        item.FEE_PER_DAY  = Math.Round(Convert.ToDecimal(txtFeePerDay.Text.Replace(",", string.Empty)));
                        if (!string.IsNullOrEmpty(txtRentDate.Text))
                        {
                            item.RENT_DATE = DateTime.ParseExact(txtRentDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            item.RENT_DATE = DateTime.Now;
                        }

                        if (!string.IsNullOrEmpty(txtEndDate.Text))
                        {
                            item.END_DATE = DateTime.ParseExact(txtEndDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            item.END_DATE = item.RENT_DATE.AddDays(29);
                        }
                        item.EXTEND_END_DATE     = item.END_DATE;
                        item.CLOSE_CONTRACT_DATE = new DateTime(1, 1, 1);
                        item.PAY_FEE_MESSAGE     = string.Empty;
                        item.NOTE              = txtNote.Text;
                        item.REFERENCE_ID      = -1;
                        item.REFERENCE_NAME    = txtReferencePerson.Text.Trim();
                        item.ITEM_TYPE         = txtItemName.Text.Trim();
                        item.ITEM_LICENSE_NO   = txtItemLicenseNo.Text.Trim();
                        item.SERIAL_1          = txtSerial1.Text.Trim();
                        item.SERIAL_2          = txtSerial2.Text.Trim();
                        item.REFERENCE_PHONE   = txtReferencePhone.Text.Trim();
                        item.SCHOOL_NAME       = txtSchool.Text.Trim();
                        item.CLASS_NAME        = txtClass.Text.Trim();
                        item.IMPLEMENTER       = txtImplementer.Text.Trim();
                        item.BACK_TO_DOCUMENTS = txtBackDocument.Text.Trim();
                        item.DETAIL            = txtItemDetail.Text.Trim();
                        item.CUSTOMER_ID       = cusid;
                        item.CONTRACT_STATUS   = true;
                        item.CONTRACT_AMOUNT   = Convert.ToDecimal(txtAmount.Text.Replace(",", string.Empty));
                        item.CREATED_BY        = Session["username"].ToString();
                        item.CREATED_DATE      = DateTime.Now;
                        item.UPDATED_BY        = Session["username"].ToString();
                        item.UPDATED_DATE      = DateTime.Now;
                        //item.CONTRACT_NO = txtContractNo.Text.Trim();
                        if (ddlStore.Enabled == true)
                        {
                            item.STORE_ID = Convert.ToInt32(ddlStore.SelectedValue);
                        }
                        else
                        {
                            item.STORE_ID = Convert.ToInt32(Session["store_id"]);
                        }
                        item.SEARCH_TEXT = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                                         txtCustomerName.Text.Trim(),
                                                         txtBirthDay.Text.Trim(),
                                                         txtLicenseNumber.Text.Trim(),
                                                         txtRangeDate.Text.Trim(),
                                                         txtPermanentResidence.Text.Trim(),
                                                         txtCurrentResidence.Text.Trim(),
                                                         txtPhone.Text.Trim(),
                                                         item.CONTRACT_NO,
                                                         item.RENT_DATE.ToString("dd/MM/yyyy"));
                        SavePhoto(item);
                        using (var db = new RentBikeEntities())
                        {
                            db.Contracts.Add(item);
                            db.SaveChanges();


                            DateTime periodTime = DateTime.Today;
                            if (!string.IsNullOrEmpty(txtRentDate.Text))
                            {
                                periodTime = DateTime.ParseExact(txtRentDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            }
                            PayPeriod newPeriod = new PayPeriod();
                            newPeriod.PAY_DATE = periodTime;
                            CommonList.CreatePayPeriod(db, item.ID, newPeriod, true);
                        }

                        InOut io = new InOut();
                        io.CONTRACT_ID  = item.ID;
                        io.IN_AMOUNT    = 0;
                        io.OUT_AMOUNT   = Convert.ToDecimal(txtAmount.Text);
                        io.RENT_TYPE_ID = Convert.ToInt32(ddlRentType.SelectedValue);
                        io.PERIOD_DATE  = DateTime.Now;
                        io.MORE_INFO    = string.Format("Cho khách {0} thuê: {1} ngày {2} trị giá {3}", txtCustomerName.Text.Trim(), txtItemName.Text.Trim(), DateTime.Now.ToString("dd/MM/yyyy"), txtAmount.Text.Trim());
                        if (ddlStore.Enabled == true)
                        {
                            io.STORE_ID = Convert.ToInt32(ddlStore.SelectedValue);
                        }
                        else
                        {
                            io.STORE_ID = Convert.ToInt32(Session["store_id"]);
                        }
                        io.SEARCH_TEXT   = string.Format("{0} ", io.MORE_INFO);
                        io.INOUT_DATE    = DateTime.Now;
                        io.CREATED_BY    = Session["username"].ToString();
                        io.CREATED_DATE  = DateTime.Now;
                        io.UPDATED_BY    = Session["username"].ToString();
                        io.UPDATED_DATE  = DateTime.Now;
                        io.INOUT_TYPE_ID = CommonList.GetInoutTypeFromRentType(Helper.parseInt(ddlRentType.SelectedValue));

                        using (var rbdb = new RentBikeEntities())
                        {
                            rbdb.InOuts.Add(io);
                            rbdb.SaveChanges();

                            CommonList.AutoExtendPeriod(rbdb, item.ID);
                        }
                        string message = string.Format("Tài khoản {0} cửa hàng {1} thực hiện làm hợp đồng cho khách hàng {2} vào lúc {3}", Convert.ToString(Session["username"]), STORE_NAME, cusItem.NAME, DateTime.Now);
                        Helper.WriteLog(Convert.ToString(Session["username"]), STORE_NAME, Constants.ACTION_CREATE_CONTRACT, message, false);
                        ts.Complete();
                    }
                    else // EDIT
                    {
                        result = ValidatePermission();
                        if (!string.IsNullOrEmpty(result))
                        {
                            lblMessage.Text = result;
                            return;
                        }

                        int  contractId            = Helper.parseInt(id);
                        bool bUpdateInOutAndPeriod = false;
                        using (var db = new RentBikeEntities())
                        {
                            var     item           = db.Contracts.FirstOrDefault(itm => itm.ID == contractId);
                            int     rentTypeId     = Helper.parseInt(ddlRentType.SelectedValue);
                            decimal contractAmount = Convert.ToDecimal(txtAmount.Text);
                            decimal feePerDay      = Convert.ToDecimal(txtFeePerDay.Text);

                            if (contractAmount != item.CONTRACT_AMOUNT || rentTypeId != item.RENT_TYPE_ID || feePerDay != item.FEE_PER_DAY)
                            {
                                bUpdateInOutAndPeriod = true;
                            }


                            if (bUpdateInOutAndPeriod)
                            {
                                //Update for contract record only.
                                int inOutTypeId = CommonList.GetInoutTypeFromRentType(item.RENT_TYPE_ID);
                                var inOut       = db.InOuts.FirstOrDefault(c => c.CONTRACT_ID == contractId && c.INOUT_TYPE_ID == inOutTypeId);
                                if (inOut != null)
                                {
                                    // SAVE INOUT
                                    inOut.OUT_AMOUNT    = contractAmount;
                                    inOut.RENT_TYPE_ID  = rentTypeId;
                                    inOut.INOUT_TYPE_ID = CommonList.GetInoutTypeFromRentType(rentTypeId);
                                    inOut.MORE_INFO     = inOut.SEARCH_TEXT = string.Format("Cho khách {0} thuê: {1} ngày {2} trị giá {3}", txtCustomerName.Text.Trim(), txtItemName.Text.Trim(), DateTime.Now.ToString("dd/MM/yyyy"), txtAmount.Text.Trim());
                                    inOut.UPDATED_BY    = Session["username"].ToString();
                                    inOut.UPDATED_DATE  = DateTime.Now;
                                }

                                //Update for others in out record of the contract
                                var listInOut = db.InOuts.Where(c => c.CONTRACT_ID == contractId && c.RENT_TYPE_ID == item.RENT_TYPE_ID).ToList();
                                foreach (var io in listInOut)
                                {
                                    io.RENT_TYPE_ID = rentTypeId;
                                    io.UPDATED_BY   = Session["username"].ToString();
                                    io.UPDATED_DATE = DateTime.Now;
                                }

                                //Update for 3 first PayPeriod records
                                List <PayPeriod> listPayPeriod = db.PayPeriods.Where(c => c.CONTRACT_ID == contractId).ToList();
                                foreach (var pp in listPayPeriod.Take(3))
                                {
                                    pp.AMOUNT_PER_PERIOD = feePerDay * 10;
                                }

                                //Update for remain PayPeriod records
                                int     multipleFee      = Convert.ToInt32(Decimal.Floor(contractAmount / 100000));
                                decimal increateFeeCar   = (feePerDay * 10) + (multipleFee * 50 * 10);
                                decimal increateFeeEquip = (feePerDay * 10) + (multipleFee * 100 * 10);
                                decimal increateFeeOther = (feePerDay * 10);
                                foreach (var pp in listPayPeriod.Skip(3))
                                {
                                    switch (rentTypeId)
                                    {
                                    case 1:
                                        if (((feePerDay / multipleFee) * 10) < 4000)
                                        {
                                            pp.AMOUNT_PER_PERIOD = increateFeeCar;
                                        }
                                        else
                                        {
                                            pp.AMOUNT_PER_PERIOD = feePerDay * 10;
                                        }
                                        break;

                                    case 2:
                                        if (((feePerDay / multipleFee) * 10) < 6000)
                                        {
                                            pp.AMOUNT_PER_PERIOD = increateFeeEquip;
                                        }
                                        else
                                        {
                                            pp.AMOUNT_PER_PERIOD = feePerDay * 10;
                                        }
                                        break;

                                    default:
                                        pp.AMOUNT_PER_PERIOD = increateFeeOther;
                                        break;
                                    }
                                }
                            }

                            //Update contract infor
                            item.NOTE              = txtNote.Text;
                            item.REFERENCE_ID      = -1;
                            item.REFERENCE_NAME    = txtReferencePerson.Text.Trim();
                            item.ITEM_TYPE         = txtItemName.Text.Trim();
                            item.ITEM_LICENSE_NO   = txtItemLicenseNo.Text.Trim();
                            item.RENT_TYPE_ID      = Helper.parseInt(ddlRentType.SelectedValue);
                            item.CONTRACT_AMOUNT   = Convert.ToDecimal(txtAmount.Text);
                            item.FEE_PER_DAY       = Convert.ToDecimal(txtFeePerDay.Text);
                            item.SERIAL_1          = txtSerial1.Text.Trim();
                            item.SERIAL_2          = txtSerial2.Text.Trim();
                            item.REFERENCE_PHONE   = txtReferencePhone.Text.Trim();
                            item.SCHOOL_NAME       = txtSchool.Text.Trim();
                            item.CLASS_NAME        = txtClass.Text.Trim();
                            item.IMPLEMENTER       = txtImplementer.Text.Trim();
                            item.BACK_TO_DOCUMENTS = txtBackDocument.Text.Trim();
                            item.DETAIL            = txtItemDetail.Text.Trim();
                            item.SEARCH_TEXT       = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}",
                                                                   txtCustomerName.Text.Trim(),
                                                                   txtBirthDay.Text.Trim(),
                                                                   txtLicenseNumber.Text.Trim(),
                                                                   txtRangeDate.Text.Trim(),
                                                                   txtPermanentResidence.Text.Trim(),
                                                                   txtCurrentResidence.Text.Trim(),
                                                                   txtPhone.Text.Trim(),
                                                                   item.CONTRACT_NO,
                                                                   item.RENT_DATE.ToString("dd/MM/yyyy"));

                            item.UPDATED_BY   = Session["username"].ToString();
                            item.UPDATED_DATE = DateTime.Now;
                            //Contract photo
                            SavePhoto(item);
                            //Update customer infor
                            var cusItem = db.Customers.FirstOrDefault(c => c.ID == item.CUSTOMER_ID);
                            if (cusItem != null)
                            {
                                cusItem.NAME                = txtCustomerName.Text.Trim();
                                cusItem.BIRTH_DAY           = DateTime.ParseExact(txtBirthDay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                cusItem.LICENSE_NO          = txtLicenseNumber.Text.Trim();
                                cusItem.LICENSE_RANGE_DATE  = DateTime.ParseExact(txtRangeDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                                cusItem.LICENSE_RANGE_PLACE = txtPlaceDate.Text.Trim();
                                cusItem.PHONE               = txtPhone.Text.Trim();
                                cusItem.PERMANENT_RESIDENCE = txtPermanentResidence.Text.Trim();
                                cusItem.CURRENT_RESIDENCE   = txtCurrentResidence.Text.Trim();
                            }

                            db.SaveChanges();

                            string message = string.Format("Tài khoản {0} cửa hàng {1} thực hiện chỉnh sửa hợp đồng của khách hàng {2} vào lúc {3}", Convert.ToString(Session["username"]), STORE_NAME, cusItem.NAME, DateTime.Now);
                            Helper.WriteLog(Convert.ToString(Session["username"]), STORE_NAME, Constants.ACTION_UPDATE_CONTRACT, message, false);
                        }
                        ts.Complete();
                    }
                    Response.Redirect("FormContractManagement.aspx", false);
                }
            }
            catch (Exception ex)
            {
                lblMessage.Text     = ex.Message;
                lblMessage.CssClass = "text-center text-danger";
                Logger.Log(ex.Message);
            }
        }