using BLL;
using Model;
using System;
using System.Linq;
using System.Web.Http;


namespace WebAPI.Controllers
{
    /**
     * 物资出库
     */
    public class MaterialsOutController : ApiController
    {


        #region 添加物资出库主表
        [HttpPost]
        public Model.ResponeData AddMaterialOutM(Model.Cl_W_MaterialOutM MaterialOutM)
        {
            var responeData = new Model.ResponeData();
            try
            {
                using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
                {
                    var userTime = DateTime.Now;
                    int count = db.Cl_W_MaterialOutM.Where(x => x.UserTime.Value.Year == userTime.Year&&x.UserTime.Value.Month==userTime.Month&&x.UserTime.Value.Day==userTime.Day).ToList().Count();
                    Model.Cl_W_MaterialOutM outm = new Model.Cl_W_MaterialOutM();
                    
                    outm.OutSheetMID = MaterialOutM.OutSheetMID;
                    outm.ProjectId = MaterialOutM.ProjectId;
                    outm.OutSheetCode = string.Format("CKD--{0}{1}", DateTime.Now.ToString("yyyyMMdd"),count.ToString("000"));
                    outm.UserTime = DateTime.Now;
                    outm.UnitId = MaterialOutM.UnitId;
                    outm.UAid = MaterialOutM.UAid;
                    outm.InstallationId = MaterialOutM.InstallationId;
                    outm.PlanSheetMID = MaterialOutM.PlanSheetMID; // 工区ID
                    outm.YYPID = MaterialOutM.YYPID;
                    outm.RecordMan = MaterialOutM.RecordMan;
                    db.Cl_W_MaterialOutM.InsertOnSubmit(outm);
                    db.SubmitChanges();
                    responeData.data = MaterialOutM.OutSheetMID;
                }
            }
            catch (System.Exception ex)
            {
                responeData.code = 0;
                responeData.message = ex.Message;
            }
            return responeData;
        }
        #endregion

        #region 添加物资子表
        [HttpPost]
        public Model.ResponeData AddMaterialOutS(Model.Cl_W_MaterialOutS MaterialOutS)
        {
                    var responeData = new Model.ResponeData();
            try
            {
                using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
                {
                    int count = db.Cl_W_MaterialOutM.Where(x => x.UserTime == DateTime.Now).ToList().Count();
                    Model.Cl_W_MaterialOutS outs = new Model.Cl_W_MaterialOutS();

                    outs.ProjectId = MaterialOutS.ProjectId;
                    outs.OutSheetMID = MaterialOutS.OutSheetMID;
                    outs.OutSheetSID = Guid.NewGuid().ToString();
                    outs.MaterialID = MaterialOutS.MaterialID;
                    //outs.Soft = MaterialOutS.Soft ?? DBNull.Value;
                    outs.PlannedQuantity = MaterialOutS.PlannedQuantity;
                    outs.StoreQuantity = MaterialOutS.StoreQuantity;
                    outs.OutQuantity = MaterialOutS.OutQuantity;
                    outs.OutQuantityY = MaterialOutS.OutQuantityY;
                    outs.StorePQuantity = MaterialOutS.StorePQuantity;
                    outs.CertificatesFactoryNo = MaterialOutS.CertificatesFactoryNo;
                    outs.FurnaceBatchNo = MaterialOutS.FurnaceBatchNo;
                    outs.CertificateSelfNo = MaterialOutS.CertificateSelfNo;
                    outs.Weight = MaterialOutS.Weight;
                    outs.Price = MaterialOutS.Price;
                    outs.OutQuantityP = MaterialOutS.OutQuantityP;
                    outs.OutQuantityO = MaterialOutS.OutQuantityO;
                    outs.StorehouseName = MaterialOutS.StorehouseName;
                    outs.StorageSheetSID = MaterialOutS.StorageSheetSID;
                    outs.FirstpartyCode = MaterialOutS.FirstpartyCode;
                    outs.ISupload = MaterialOutS.ISupload;
                    outs.InstallationId = MaterialOutS.InstallationId;
                    outs.Shue = MaterialOutS.Shue;
                    outs.Bhsje = MaterialOutS.Bhsje;
     
                    db.Cl_W_MaterialOutS.InsertOnSubmit(outs);

                    var sourceData = db.Cl_W_MaterialOutS
                        .Where(s => s.OutSheetMID == MaterialOutS.OutSheetMID)
                        .Select(s => new  // 先投影到匿名对象
                        {
                            ProjectId = s.ProjectId,
                            InstallationId = db.Cl_W_MaterialOutM
                                .Where(m => m.OutSheetMID == s.OutSheetMID)
                                .Select(m => m.InstallationId)
                                .FirstOrDefault(),
                            Ghfs = db.Cl_W_MaterialOutM
                                .Where(m => m.OutSheetMID == s.OutSheetMID)
                                .Select(m => m.YYPID)
                                .FirstOrDefault(),
                            FirstpartyCode = s.FirstpartyCode,
                            MaterialID = s.MaterialID,
                            OutSheetMID = s.OutSheetMID,
                            OutSheetSID = s.OutSheetSID,
                            OutQuantity = s.OutQuantity
                        })
                        .AsEnumerable()  // 切换到客户端评估
                        .Select(x => new Model.Cl_w_comp  // 现在可以构造实体对象了
                        {
                            CompID = Guid.NewGuid().ToString(),
                            ProjectId = x.ProjectId,
                            InstallationId = x.InstallationId,
                            Ghfs = x.Ghfs,
                            TAreaMaterialMID = x.FirstpartyCode,
                            TAreaMaterialSID = "",
                            MaterialID = x.MaterialID,
                            Aquantity = 0,
                            PlanSheetMID = "",
                            PlanSheetSID = "",
                            Pquantity = 0,
                            StorageSheetMID = "",
                            StorageSheetSID = "",
                            SQuantity = 0,
                            StorageHJSID = "",
                            StorageHJMID = "",
                            HQuantity = 0,
                            OutSheetMID = x.OutSheetMID,
                            OutSheetSID = x.OutSheetSID,
                            OQuantity = x.OutQuantity,
                            ReturnSheetMid = "",
                            ReturnSheetSID = "",
                            RQuantity = 0
                        });
                    db.Cl_w_comp.InsertAllOnSubmit(sourceData);
                    Model.Cl_W_MaterialOutM clw = db.Cl_W_MaterialOutM.FirstOrDefault(x => x.OutSheetMID == MaterialOutS.OutSheetMID);
                    if(clw.IsOk != "1")
                    {
                        clw.IsOk = "1";
                    }

                    db.SubmitChanges();
                    
                    responeData.data = MaterialOutS.OutSheetSID;
                }
            }
            catch (System.Exception ex)
            {
                responeData.code = 0;
                responeData.message = ex.Message;
            }
            return responeData;
        }
        #endregion

    }
}