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); }
/// <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); }
/// <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(); }
/// <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(); }
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(); }