/// <summary> /// Tính tiền, cho xe ra /// </summary> /// <param name="obj">Đối tượng Tra_Detail</param> /// <param name="day">Số ngày đậu tại bến</param> /// <param name="hour">Số giờ lẻ đậu tại bến</param> /// <param name="money">Thành tiền</param> /// <param name="price1">Đơn giá nửa ngày</param> /// <param name="price2">Đơn giá một ngày</param> /// <param name="isOut">Cho xe ra</param> /// <returns></returns> public DataTable InvoiceOut(Tra_Detail obj, ref int day, ref int hour, ref decimal money, ref int price1, ref int price2, bool isOut = false) { try { var res = from s in _db.Tra_Details join v in _db.Tra_Vehicles on s.Tra_VehicleId equals v.Id join k in _db.Tra_Kinds on v.Tra_KindId equals k.Id where s.Tra_VehicleId == obj.Tra_VehicleId orderby v.Number select new { s.Id, UserInName = s.Pol_UserIn.Name, UserInPhone = s.Pol_UserIn.Phone, UserOutName = s.Pol_UserOut.Name, v.Number, s.DateIn, s.DateOut, s.Days, s.Hours, v.Chair, k.Name, k.Tra_GroupId, GroupName = k.Tra_Group.Name, GroupCode = k.Tra_Group.Code, k.Price1, k.Price2, s.Money }; var ok = res.Single(h => h.DateOut == null); var d = _db.Tra_Details.Single(k => k.Tra_VehicleId == obj.Tra_VehicleId && k.DateOut == null); TimeSpan? dt = obj.DateOut - d.DateIn; // tính số giờ đậu tại bến hour = dt.Value.Hours; day = dt.Value.Days; int dayL = (hour < 12) ? 1 : 0; // nhỏ hơn 12 giờ thì tính nửa ngày int dayF = (hour >= 12) ? day + 1 : day; // lớn hơn bằng 12 giờ thì tính một ngày price1 = ok.Price1; price2 = ok.Price2; int chair = ok.Chair; money = 0; switch (ok.GroupCode) { case "A": if (dayF == 0) money = price1; else money = dayF * price2 + dayL * price1; break; case "B": price1 = price2 / 2; if (dayF == 0) money = price1; else money = dayF * price2 + dayL * price1; break; case "C": case "D": money = (dayL + dayF) * price2; break; case "E": money = (dayL + dayF) * price2 * chair; break; default: break; } if (isOut) { d.Pol_UserOutId = obj.Pol_UserOutId; // Id user đang đăng nhập d.DateOut = obj.DateOut; // thời gian hiện tại trên server d.Days = dayF; d.Hours = hour; d.Money = money; d.Price1 = price1; d.Price2 = price2; _db.SaveChanges(); } return res.ToDataTable(); } catch { return null; } }
/// <summary> /// Test and update driver /// </summary> /// <param name="o">Detail</param> /// <returns></returns> public object UpdateDriver(Tra_Detail o) { try { var res = _db.Tra_Details.SingleOrDefault(s => s.Id == o.Id); res.More = o.More; res.Repair = o.Repair; res.Show = o.Show; return _db.SaveChanges(); } catch { return null; } }