Exemple #1
0
 public static IQueryable <CHI_TIET_THU_NO> BelongTo(XUAT_HANG xh, DateTime TO)
 {
     TO = TO.Date;
     return(from cttn in DataInstance.Instance().DBContext().CHI_TIET_THU_NO
            where cttn.LOAI_NO == MThuNo.NO_HANG_HOA
            where cttn.NO_ID == xh.ID
            where cttn.NGAY_TRA <= TO
            select cttn);
 }
Exemple #2
0
        /// <summary>
        /// Tính lãi phát sinh của xuất hàng theo ID
        /// </summary>
        /// <param name="id"></param>
        /// <param name="include_THUNO"></param>
        /// <returns></returns>
        public static double GetLaiPhatSinh(int id, DateTime TO, bool include_THUNO = true)
        {
            double    value = 0;
            XUAT_HANG xh    = (from _xh in DataInstance.Instance().DBContext().XUAT_HANG
                               where _xh.ID == id
                               select _xh).First();

            /* Sử dụng chi tiết thu nợ để tính lãi */
            if (include_THUNO == true)
            {
                /* Những lần khách hàng đã trả cho phần nợ xuất hàng này */
                var thu_no_s = MChiTietThuNo.BelongTo(xh, TO);
                value = Utility.LaiKep((DateTime)xh.NGAY_XUAT, TO, xh.LAI_SUAT, xh.THANH_TIEN - xh.TRA_TRUOC, thu_no_s, false);
            }
            /* Không sử dụng chi tiết thu nợ */
            else
            {
                value = Utility.Lai(xh.NGAY_XUAT.Value, TO, xh.LAI_SUAT, xh.THANH_TIEN - xh.TRA_TRUOC);
            }
            return(value);
        }
Exemple #3
0
        /// <summary>
        /// Trừ số lượng xuất hàng vào số lượng còn lại của nhập hàng
        /// </summary>
        /// <param name="_SoLuong">Số lượng xuất hàng</param>
        /// <param name="ele">Object Xuất hàng</param>
        public static void Update(long _SoLuong, XUAT_HANG ele)
        {
            if (_SoLuong > 0)
            {
                List <CXuatHangChiTiet> chitiet = new List <CXuatHangChiTiet>();
                foreach (var row in DataInstance.Instance().DBContext().NHAP_HANG
                         .Where(u => u.MAKHO == ele.MAKHO)
                         .Where(u => u.MAHH == ele.MAHH)
                         .Where(u => u.SL_CON_LAI > 0)
                         .OrderBy(u => u.NGAY_NHAP))
                {
                    /**
                     * Cập nhật số lượng vào nhập hàng
                     */
                    var sub_SL = row.SL_CON_LAI;
                    row.SL_CON_LAI = _SoLuong >= row.SL_CON_LAI ? 0 : row.SL_CON_LAI - _SoLuong;

                    /* Cập nhật chi tiết số lượng, đơn giá để tính lãi lỗi*/
                    long __subSL = row.SL_CON_LAI > 0 ? _SoLuong : sub_SL;
                    if (__subSL > 0)
                    {
                        chitiet.Add(new CXuatHangChiTiet()
                        {
                            NHAPHANGID = row.ID,
                            SOLUONG    = row.SL_CON_LAI > 0 ? _SoLuong : sub_SL,
                            DONGIA     = row.DON_GIA_MUA
                        });
                    }

                    _SoLuong = _SoLuong >= sub_SL ? _SoLuong - sub_SL : 0;

                    if (_SoLuong == 0)
                    {
                        break;
                    }
                }
                string s_chitiet = JsonConvert.SerializeObject(chitiet);
                ele.CHI_TIET_XUAT_HANG = s_chitiet;
            }
            else
            {
                _SoLuong = -_SoLuong;
                List <CXuatHangChiTiet> chitiet = new List <CXuatHangChiTiet>();
                foreach (var row in DataInstance.Instance().DBContext().NHAP_HANG
                         .Where(u => u.MAKHO == ele.MAKHO)
                         .Where(u => u.MAHH == ele.MAHH)
                         .Where(u => u.SL_CON_LAI < u.SO_LUONG)
                         .OrderByDescending(u => u.NGAY_NHAP))
                {
                    /**
                     * Cập nhật số lượng vào nhập hàng
                     */
                    var sub_SL = row.SL_CON_LAI;
                    row.SL_CON_LAI = _SoLuong >= row.SO_LUONG - row.SL_CON_LAI ? row.SO_LUONG : row.SL_CON_LAI + _SoLuong;

                    /* Cập nhật chi tiết số lượng, đơn giá để tính lãi lỗi*/
                    long __subSL = row.SL_CON_LAI < row.SO_LUONG ? _SoLuong : _SoLuong - (row.SO_LUONG - row.SL_CON_LAI);
                    chitiet.Add(new CXuatHangChiTiet()
                    {
                        NHAPHANGID = row.ID,
                        SOLUONG    = __subSL,
                        DONGIA     = row.DON_GIA_MUA
                    });

                    _SoLuong = _SoLuong - sub_SL;

                    if (_SoLuong == 0)
                    {
                        break;
                    }
                }
                string s_chitiet = JsonConvert.SerializeObject(chitiet);
                ele.CHI_TIET_XUAT_HANG = s_chitiet;
            }
            DataInstance.Instance().DBContext().SaveChanges();
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="LOAINO"></param>
        /// <param name="MAKHO"></param>
        /// <param name="MAKH"></param>
        /// <param name="TIENGOC"></param>
        /// <param name="TIENLAI"></param>
        /// <param name="NGAYTRA"></param>
        /// <param name="NOIDUNG"></param>
        public static void Update(THU_NO ele)
        {
            long     LOAINO  = ele.LOAI_NO;
            long     MAKHO   = ele.MAKHO;
            long     MAKH    = ele.MAKH.Value;
            Int64    TIENGOC = ele.TIEN_GOC;
            Int64    TIENLAI = ele.TIEN_LAI;
            DateTime NGAYTRA = ele.NGAY_TRA;
            string   NOIDUNG = ele.NOI_DUNG;

            /**
             * Nợ khác: Thêm vào 1 record, không tác động gì khác
             * Nợ vay và nợ HH: Cần cập nhật chi tiết nợ
             */
            if (LOAINO != NO_KHAC)
            {
                var  _TIENGOC  = TIENGOC;
                var  _TIENLAI  = TIENLAI;
                long _start_id = 0;
                while (true)
                {
                    long     _id       = 0;              // ID nợ của Khách Hàng
                    double   _tong_no  = 0;              // Tổng nợ nợ của Khách Hàng
                    double   _lai_suat = 0;              // Lãi suất nợ của Khách Hàng
                    DateTime _ngay_no  = new DateTime(); //Ngày nợ của Khách Hàng

                    /* Lấy ra record nợ xa nhất chưa trả xong của khách hàng */
                    switch (ele.LOAI_NO)
                    {
                    case NO_HANG_HOA:
                        try
                        {
                            XUAT_HANG _xh = (from xh in DataInstance.Instance().DBContext().XUAT_HANG
                                             where xh.MAKHO == ele.MAKHO
                                             where xh.MAKH == ele.MAKH
                                             where xh.ID > _start_id
                                             where xh.TRANG_THAI == MXuatHang.CHUA_TRA_XONG
                                             orderby xh.NGAY_XUAT ascending
                                             select xh).First();
                            _id       = _xh.ID;
                            _tong_no  = _xh.THANH_TIEN - _xh.TRA_TRUOC;
                            _ngay_no  = _xh.NGAY_XUAT.Value.Date;
                            _lai_suat = _xh.LAI_SUAT;
                        }
                        catch (Exception ex)
                        {
                            break;
                        }
                        break;

                    case NO_VAY:
                        try
                        {
                            CHO_VAY _cv = (from xh in DataInstance.Instance().DBContext().CHO_VAY
                                           where xh.MAKHO == ele.MAKHO
                                           where xh.MA_NGUON_NO == ele.MAKH
                                           where xh.TRANG_THAI == MXuatHang.CHUA_TRA_XONG
                                           where xh.ID > _start_id
                                           orderby xh.NGAY_CHO_VAY ascending
                                           select xh).First();
                            _id       = _cv.ID;
                            _tong_no  = _cv.TONG_TIEN;
                            _ngay_no  = _cv.NGAY_CHO_VAY.Date;
                            _lai_suat = _cv.LAI_SUAT;
                        }
                        catch (Exception ex)
                        {
                            break;
                        }
                        break;
                    }

                    double _lai = 0;        // Lãi mà khách hàng nợ
                    double _goc = _tong_no; // Tiền mà khách hàng nợ

                    /* Lấy chi tiết những lần thanh toán trước cho record nợ này. Nếu có */
                    var _thanh_toan_s = (from tt in DataInstance.Instance().DBContext().CHI_TIET_THU_NO
                                         where tt.LOAI_NO == ele.LOAI_NO
                                         where tt.NO_ID == _id
                                         orderby tt.NGAY_TRA ascending
                                         select tt
                                         );

                    /* Tính lãi phần còn lại sau khi đã thanh toán một hay nhiều phần */
                    DateTime _ngay_no_hien_tai = _ngay_no;
                    foreach (CHI_TIET_THU_NO _r in _thanh_toan_s)
                    {
                        _lai += Utility.Lai(_ngay_no_hien_tai, _r.NGAY_TRA, _lai_suat, _goc) - _r.TIEN_LAI;
                        _ngay_no_hien_tai = _r.NGAY_TRA;
                        _goc -= _r.TIEN_GOC;
                    }

                    _lai += Utility.Lai(_ngay_no_hien_tai, _lai_suat, _goc);

                    // Đã tổng tiền gốc nợ và lãi hiện tại khách hàng nợ.
                    CHI_TIET_THU_NO _e = new CHI_TIET_THU_NO();
                    _e.LOAI_NO    = ele.LOAI_NO;
                    _e.THU_NO_ID  = ele.ID;
                    _e.NO_ID      = _id;
                    _e.NGAY_TRA   = ele.NGAY_TRA;
                    _e.TIEN_GOC   = (long)(_goc < _TIENGOC ? _goc : _TIENGOC);
                    _e.TIEN_LAI   = (long)(_lai < _TIENLAI ? _lai : _TIENLAI);;
                    _e.CREATED_AT = DateTime.Now;
                    if (!(_e.TIEN_GOC == 0 && _e.TIEN_LAI == 0))
                    {
                        DataInstance.Instance().DBContext().AddToCHI_TIET_THU_NO(_e);
                        DataInstance.Instance().DBContext().SaveChanges();
                    }

                    /* Cập nhật TRANG_THAI của nợ hàng hóa hoặc nợ vay */
                    if (_TIENGOC >= _goc && _TIENLAI >= _lai)
                    {
                        switch (ele.LOAI_NO)
                        {
                        case NO_HANG_HOA:
                            try
                            {
                                var _xh = (from xh in DataInstance.Instance().DBContext().XUAT_HANG
                                           where xh.ID == _id
                                           select xh).First();
                                _xh.TRANG_THAI = MXuatHang.DA_TRA_XONG;
                                DataInstance.Instance().DBContext().SaveChanges();
                            }
                            catch (Exception ex)
                            {
                            }
                            break;
                        }
                    }


                    /* Cập nhập lại tiền gốc tiền lãi */
                    _TIENGOC = (long)(_TIENGOC > _goc ? _TIENGOC - _goc : 0);
                    _TIENLAI = (long)(_TIENLAI > _lai ? _TIENLAI - _lai : 0);

                    /* Hết tiền để thanh toán */
                    if (_TIENGOC == 0 && _TIENLAI == 0)
                    {
                        break;
                    }
                    /* Hết tiền gốc hoặc lãi để thanh toán lần xuất hàng hiện tại */
                    //if ((_TIENGOC == 0 && _TIENLAI != 0) || (_TIENGOC != 0 && _TIENLAI == 0))
                    // {
                    _start_id = _id;
                    //}
                }
            }

            DataInstance.Instance().DBContext().SaveChanges();
        }
Exemple #5
0
        private void buttonADD_Click(object sender, EventArgs e)
        {
            try
            {
                var ele = new XUAT_HANG();
                ele.MAKHO = Convert.ToInt32(comboBoxKho.SelectedValue.ToString());
                if (checkBoxBANMAT.Checked == true)
                {
                    ele.MAKH      = MXuatHang.MAKH_XUAT_MAT;
                    ele.TRA_TRUOC = 0;
                    ele.LAI_SUAT  = 0;
                }
                else
                {
                    ele.MAKH      = Convert.ToInt32(comboBoxKHACH_HANG.SelectedValue.ToString());
                    ele.TRA_TRUOC = Convert.ToInt32(textBoxDUATRUOC.Text);
                    ele.LAI_SUAT  = Convert.ToDouble(textBoxLAISUAT.Text) / 100;
                }
                ele.NGAY_XUAT   = dateTimePickerNGAYBAN.Value.Date;
                ele.CREATED_AT  = DateTime.Now;
                ele.SO_LUONG    = Convert.ToInt32(textBoxSOLUONG.Text);
                ele.DON_GIA_BAN = Convert.ToInt32(textBoxDONGIA.Text);
                ele.MAHH        = Convert.ToInt32(comboBoxHANGHOA.SelectedValue.ToString());
                ele.TRANG_THAI  = MXuatHang.CHUA_TRA_XONG;
                ele.THANH_TIEN  = ele.SO_LUONG * ele.DON_GIA_BAN;

                if (ele.DON_GIA_BAN < 0 || ele.TRA_TRUOC < 0 || ele.LAI_SUAT < 0)
                {
                    MessageBox.Show("Đơn giá, trả trước, lãi suất không được nhỏ hơn 0");
                    return;
                }
                if (ele.DON_GIA_BAN == 0 && ele.SO_LUONG == 0)
                {
                    if (ele.TRA_TRUOC == 0)
                    {
                        MessageBox.Show("Dữ liệu nhập vào không hợp lệ");
                        textBoxDUATRUOC.Select();
                        textBoxDUATRUOC.SelectAll();
                        return;
                    }
                }
                if (ele.DON_GIA_BAN < ConstClass.DON_GIA_BASE && ele.SO_LUONG > 0)
                {
                    MessageBox.Show("Đơn giá không hợp lệ");
                    textBoxDONGIA.Select();
                    textBoxDONGIA.SelectAll();
                    return;
                }
                long lton = MKho.Ton(ele.MAKHO, ele.MAHH);
                if (ele.SO_LUONG > lton)
                {
                    MessageBox.Show("Số lượng bán hàng lớn hơn số lượng tồn.\nCòn tồn: " + lton.ToString(), "Lỗi số lượng!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    comboBoxHANGHOA.Select();
                    return;
                }

                bs.Add(ele);
                bs.EndEdit();
                bs.ResetBindings(false);
                /* TRỪ SỐ LƯỢNG HÀNG ĐÃ XUẤT VÀO NHẬP HÀNG */
                MXuatHang.Update(ele.SO_LUONG, ele);
                dbContext.SaveChanges();
                textBoxDONGIA.SelectAll();

                textBoxLAISUAT.Text  = "0";
                textBoxDUATRUOC.Text = "0";
                textBoxDONGIA.Text   = "0";
                textBoxSOLUONG.Text  = "0";
                long kho = long.Parse(comboBoxKho.SelectedValue.ToString());
                long hh  = long.Parse(comboBoxHANGHOA.SelectedValue.ToString());

                long ton = MKho.Ton(kho, hh);
                labelTON.Text = "TỒN: " + ton.ToString();
            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                MessageBox.Show("Dữ liệu nhập vào phải là số");
            }
            comboBoxHANGHOA.Select();
        }