public production_report_supplier_model() { db = new production_report_supplier_db(); }
public void calculate(string id_warehouse) { var date_update = _context.production_report_suppliers .Max(d => d.date_update) ?? new DateTime(1999, 1, 1); var date_update_current = DateTime.Now; //export var supply_query = _context.production_order_need_supplier_schedules .Where(d => d.status_export != 2) .Where(d => d.create_date > date_update) .Where(d => _context.Fn_check_finish_approval(_context.production_orders.Where(t => t.id == d.id_production_order) .Select(t => t.id_approval).SingleOrDefault()) == true); var purchase_query = _context.business_purchase_order_import_dates .Where(d => d.status_import != 2) .Where(d => _context.Fn_check_finish_approval(_context.business_purchase_orders.Where(t => t.id == d.id_business_purchase_order) .Select(t => t.id_approval).SingleOrDefault()) == true); var list_item = supply_query .Select(d => new { id_item = d.id_item, id_unit = d.id_unit_main }).Distinct().ToList(); var listadd = new List <production_report_supplier_db>(); for (int i = 0; i < list_item.Count; i++) { var delete = _context.production_report_suppliers .Where(d => d.id_item == list_item[i].id_item) .Where(t => t.date_production > date_update_current); _context.production_report_suppliers.RemoveRange(delete); _context.SaveChanges(); var date_supplys = supply_query.Where(d => d.id_item == list_item[i].id_item) .Select(d => d.need_supplier_date).Distinct().ToList(); if (date_supplys.Count == 0) { continue; } var current_Stock = getcurretstockofitem(list_item[i].id_item); for (int d = 0; d < date_supplys.Count; d++) { var db = new production_report_supplier_db() { date_update = date_update_current, id = 0, id_item = list_item[i].id_item, id_unit = list_item[i].id_unit, date_production = date_supplys[d] }; db.quantity_current_stock_expected = current_Stock; db.quantity_need_suply = supply_query.Where(d => d.id_item == list_item[i].id_item) .Where(t => t.need_supplier_date == date_supplys[d]).Sum(d => (decimal?)((d.quantity ?? 0) - (d.quantity_export ?? 0))) ?? 0; var totalpurchase = purchase_query.Where(t => t.estimated_import_date < date_supplys[d]) .Sum(d => (decimal?)((d.quantity ?? 0) - (d.quantity_import ?? 0))) ?? 0; var totalsuplybefore = supply_query.Where(d => d.id_item == list_item[i].id_item) .Where(t => t.need_supplier_date < date_supplys[d]).Sum(d => (decimal?)((d.quantity ?? 0) - (d.quantity_export ?? 0))) ?? 0; db.quantity_purchase_expected = totalpurchase - totalsuplybefore; if (db.quantity_purchase_expected < 0) { db.quantity_purchase_expected = 0; } if (db.quantity_purchase_expected + db.quantity_current_stock_expected - db.quantity_need_suply < 0) { db.status = 2; } else { db.status = 1; } current_Stock = current_Stock - db.quantity_need_suply; listadd.Add(db); } ; } _context.production_report_suppliers.AddRange(listadd); _context.SaveChanges(); }