Example #1
0
        public ActionResult BokRetrieve(String wmsno, String bllid, String bocino, String clsid, String checi, String gdsid, double qty)
        {
            //正在生成拣货单,请稍候重试
            //string quRetrv = GetQuByGdsid(gdsid, LoginInfo.DefStoreid).FirstOrDefault();
            //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
            //{
            //    return RInfo( "I0102" );
            //}

            //得到wms_cutgds
            var qry = from e in WmsDc.wms_cutgds
                      join e1 in WmsDc.gds on e.gdsid equals e1.gdsid
                      where e.bocino == bocino.Trim() && e.clsid == clsid.Trim() && e.checi == checi.Trim() &&
                      e.wmsno == wmsno.Trim() && e.bllid == bllid.Trim() &&
                      e.gdsid == gdsid.Trim() &&
                      e.savdptid == LoginInfo.DefSavdptid &&
                      dpts.Contains(e1.dptid)
                      select e;
            var arrqry = qry.ToArray();

            if (arrqry.Length < 0)
            {
                return(RNoData("N0066"));
            }
            wms_cutgds cutgds = arrqry[0];

            //得到对应的stkotdtl里面的未播种,未审核的单据商品信息

            /*var qrystkot = from e in WmsDc.stkotdtl
             *             where e.stkot.wmsno == wmsno.Trim()
             *             && e.stkot.wmsbllid == bllid.Trim()
             *             && e.stkot.chkflg == GetN()
             *             && e.stkot.bzflg == GetN()
             *             && dpts.Contains(e.stkot.dptid)
             *             && e.gdsid == gdsid.Trim()
             *             select e;
             */
            var qrystkot = from e in WmsDc.stkot
                           join e1 in WmsDc.stkotdtl on e.stkouno equals e1.stkouno
                           join e2 in WmsDc.gds on e1.gdsid equals e2.gdsid
                           join e3 in WmsDc.wms_cang on new { e.wmsno, e.wmsbllid } equals new { e3.wmsno, wmsbllid = e3.bllid }
            join e4 in WmsDc.wms_boci on new { dh = e3.lnkbocino, sndtmd = e3.lnkbocidat, e3.qu } equals new { e4.dh, e4.sndtmd, e4.qu }
            join e5 in WmsDc.view_pssndgds on new { e4.dh, e4.clsid, e4.sndtmd, e.rcvdptid, e4.qu } equals new { e5.dh, e5.clsid, e5.sndtmd, e5.rcvdptid, e5.qu }
            join e6 in WmsDc.dpt on e.rcvdptid equals e6.dptid
            where e.wmsno == wmsno &&
            e.savdptid == LoginInfo.DefSavdptid &&
            dpts.Contains(e.dptid.Trim()) &&
            e.bllid == WMSConst.BLL_TYPE_DISPATCH &&
            e5.busid.Trim().Substring(e5.busid.Trim().Length - 1, 1) == checi &&
            e.wmsbllid == bllid.Trim() &&
            e.chkflg == GetN() &&
            e.bzflg == GetN() &&
            e1.gdsid == gdsid.Trim()
            //&& (e1.bzflg == GetN() || e1.bzflg == null)
            orderby e1.bzflg, e1.gdsid
            select e1;
            var arrqrystkot = qrystkot.ToArray();

            if (arrqrystkot.Length <= 0)
            {
                return(RNoData("N0067"));
            }
            stkotdtl[] stkotdtl = arrqrystkot;
            //得到wms_cang的信息
            var qrycang = from e in WmsDc.wms_cang
                          where e.wmsno == wmsno.Trim() &&
                          e.bllid == bllid.Trim() &&
                          qus.Contains(e.qu)
                          select e;
            var arrqrycang = qrycang.ToArray();

            if (arrqrycang.Length <= 0)
            {
                return(RNoData("N0068"));
            }
            wms_cang[] wms_cang = arrqrycang;
            //得到wms_cang的信息
            var qrycangdtl = from e in WmsDc.wms_cangdtl
                             where e.wmsno == wmsno.Trim() &&
                             e.bllid == bllid.Trim() &&
                             e.gdsid == gdsid.Trim()
                             select e;
            var arrqrycangdtl = qrycangdtl.ToArray();

            if (arrqrycangdtl.Length <= 0)
            {
                return(RNoData("N0069"));
            }
            wms_cangdtl[] wms_cangdtl = arrqrycangdtl;

            if (cutgds.chkflg == GetY())
            {
                return(RInfo("I0103"));
            }

            // done: 取消对 5、分货确认时,发现数量小于应分货数量,要循环扣除对应的stkotdtl里面的qty 的注释
            if (qty < stkotdtl.Sum(e => e.qty))
            {
                Log.i(LoginInfo.Usrid, Mdlid, wmsno, bllid, Mdldes,
                      gdsid.Trim() + ":应拣:" + Math.Round(stkotdtl.Sum(e => e.qty), 4, MidpointRounding.AwayFromZero)
                      + ";实拣:" + Math.Round(qty, 4, MidpointRounding.AwayFromZero),
                      "", LoginInfo.DefSavdptid);
                double diff = stkotdtl.Sum(e => e.qty) - qty;

                //减小数部分
                #region 减小数部分
                foreach (stkotdtl d in stkotdtl)
                {
                    if (d.preqty == null)
                    {
                        d.preqty = d.qty;
                    }
                    double xtmp = d.qty * 10000 % 10000 / 10000;
                    if (diff > 0 && diff >= xtmp)
                    {
                        diff  -= xtmp;
                        d.qty -= xtmp;

                        d.qty        = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.pkgqty     = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.taxamt     = Math.Round(d.qty * d.prc * d.taxrto, 4);
                        d.amt        = Math.Round(d.qty * d.prc, 4);
                        d.salamt     = d.qty * d.salprc;
                        d.patamt     = Math.Round(d.qty * d.taxprc, 4);
                        d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                    }
                    else if (diff > 0 && diff < xtmp)
                    {
                        d.qty -= diff;
                        diff   = 0;

                        d.qty        = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.pkgqty     = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.taxamt     = Math.Round(d.qty * d.prc * d.taxrto, 4);
                        d.amt        = Math.Round(d.qty * d.prc, 4);
                        d.salamt     = d.qty * d.salprc;
                        d.patamt     = Math.Round(d.qty * d.taxprc, 4);
                        d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                    }
                }
                //WmsDc.SubmitChanges();
                #endregion 减小数部分
                //减去零散件规
                #region 减去零散件规
                foreach (stkotdtl d in stkotdtl)
                {
                    if (d.preqty == null)
                    {
                        d.preqty = d.qty;
                    }
                    double xtmp = (double)WmsDc.ExecuteQuery <decimal>("select convert(decimal,{0}) % convert(decimal,e.cnvrto) from v_wms_pkg e where e.gdsid={1}",
                                                                       d.qty, d.gdsid).FirstOrDefault();

                    /*double xtmp = (from e in WmsDc.v_wms_pkg
                     *             where e.gdsid == d.gdsid
                     *             select Convert.ToInt32(d.qty) % e.cnvrto).FirstOrDefault();*/
                    if (diff > 0 && diff >= xtmp)
                    {
                        diff  -= xtmp;
                        d.qty -= xtmp;

                        d.qty        = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.pkgqty     = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.taxamt     = Math.Round(d.qty * d.prc * d.taxrto, 4);
                        d.amt        = Math.Round(d.qty * d.prc, 4);
                        d.salamt     = d.qty * d.salprc;
                        d.patamt     = Math.Round(d.qty * d.taxprc, 4);
                        d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                    }
                    else if (diff > 0 && diff < xtmp)
                    {
                        d.qty -= diff;
                        diff   = 0;

                        d.qty        = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.pkgqty     = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.taxamt     = Math.Round(d.qty * d.prc * d.taxrto, 4);
                        d.amt        = Math.Round(d.qty * d.prc, 4);
                        d.salamt     = d.qty * d.salprc;
                        d.patamt     = Math.Round(d.qty * d.taxprc, 4);
                        d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                    }
                }
                //WmsDc.SubmitChanges();
                #endregion 减去零散件规
                //减去从大到小的数量
                #region 减去从大到小的数量
                foreach (stkotdtl d in stkotdtl)
                {
                    if (d.preqty == null)
                    {
                        d.preqty = d.qty;
                    }
                    if (diff > 0 && diff >= d.qty)
                    {
                        diff -= d.qty;
                        d.qty = 0;

                        d.qty        = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.pkgqty     = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.taxamt     = Math.Round(d.qty * d.prc * d.taxrto, 4);
                        d.amt        = Math.Round(d.qty * d.prc, 4);
                        d.salamt     = d.qty * d.salprc;
                        d.patamt     = Math.Round(d.qty * d.taxprc, 4);
                        d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                    }
                    else if (diff > 0 && diff < d.qty)
                    {
                        d.qty = d.qty - diff;
                        diff  = 0;

                        d.qty        = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.pkgqty     = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                        d.taxamt     = Math.Round(d.qty * d.prc * d.taxrto, 4);
                        d.amt        = Math.Round(d.qty * d.prc, 4);
                        d.salamt     = d.qty * d.salprc;
                        d.patamt     = Math.Round(d.qty * d.taxprc, 4);
                        d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                    }
                }
                WmsDc.SubmitChanges();
                #endregion 减去从大到小的数量

                /*
                 * foreach (stkotdtl d in stkotdtl)
                 * {
                 *  if (d.preqty==null)
                 *  {
                 *      d.preqty = d.qty;
                 *  }
                 *  if (diff > 0 && diff>=d.qty)
                 *  {
                 *      diff -= d.qty;
                 *      d.qty = 0;
                 *
                 *      d.qty = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                 *      d.pkgqty = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                 *      d.taxamt = Math.Round(d.qty * d.prc * d.taxrto, 4);
                 *      d.amt = Math.Round(d.qty * d.prc, 4);
                 *      d.salamt = d.qty * d.salprc;
                 *      d.patamt = Math.Round(d.qty * d.taxprc, 4);
                 *      d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                 *  }
                 *  else if (diff > 0 && diff < d.qty)
                 *  {
                 *      d.qty = d.qty - diff;
                 *      diff = 0;
                 *
                 *      d.qty = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                 *      d.pkgqty = Math.Round(d.qty, 4, MidpointRounding.AwayFromZero);
                 *      d.taxamt = Math.Round(d.qty * d.prc * d.taxrto, 4);
                 *      d.amt = Math.Round(d.qty * d.prc, 4);
                 *      d.salamt = d.qty * d.salprc;
                 *      d.patamt = Math.Round(d.qty * d.taxprc, 4);
                 *      d.stotcstamt = Math.Round(d.qty * d.stotcstprc.Value, 4);
                 *  }
                 * }*/
            }

            //修改wms_cutgds中的ckr, chkflg, chkdat,qty
            cutgds.ckr    = LoginInfo.Usrid;
            cutgds.chkflg = GetY();
            cutgds.qty    = qty;
            cutgds.chkdat = GetCurrentDate();
            try
            {
                WmsDc.SubmitChanges();
            }
            catch (Exception ex)
            {
                return(RErr(ex.Message, "E0014"));
            }

            return(RSucc("成功", null, "S0059"));
        }
        public ActionResult BokRetrieve(String wmsno, String bllid, String bocino, String clsid, String checi, String gdsid, double qty)
        {
            //正在生成拣货单,请稍候重试
            //string quRetrv = GetQuByGdsid(gdsid, LoginInfo.DefStoreid).FirstOrDefault();
            //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
            //{
            //    return RInfo( "I0102" );
            //}

            //得到wms_cutgds
            var qry = from e in WmsDc.wms_cutgds
                      join e1 in WmsDc.gds on e.gdsid equals e1.gdsid
                      where e.bocino == bocino.Trim() && e.clsid == clsid.Trim() && e.checi == checi.Trim() &&
                      e.wmsno == wmsno.Trim() && e.bllid == bllid.Trim() &&
                      e.gdsid == gdsid.Trim() &&
                      e.savdptid == LoginInfo.DefSavdptid &&
                      dpts.Contains(e1.dptid)
                      select e;
            var arrqry = qry.ToArray();

            if (arrqry.Length < 0)
            {
                return(RNoData("N0066"));
            }
            wms_cutgds cutgds = arrqry[0];

            //得到对应的stkotdtl里面的未播种,未审核的单据商品信息

            /*var qrystkot = from e in WmsDc.stkotdtl
             *             where e.stkot.wmsno == wmsno.Trim()
             *             && e.stkot.wmsbllid == bllid.Trim()
             *             && e.stkot.chkflg == GetN()
             *             && e.stkot.bzflg == GetN()
             *             && dpts.Contains(e.stkot.dptid)
             *             && e.gdsid == gdsid.Trim()
             *             select e;
             */
            var qrystkot = from e in WmsDc.stkot
                           join e1 in WmsDc.stkotdtl on e.stkouno equals e1.stkouno
                           join e2 in WmsDc.gds on e1.gdsid equals e2.gdsid
                           join e3 in WmsDc.wms_cang on new { e.wmsno, e.wmsbllid } equals new { e3.wmsno, wmsbllid = e3.bllid }
            join e4 in WmsDc.wms_boci on new { dh = e3.lnkbocino, sndtmd = e3.lnkbocidat, e3.qu } equals new { e4.dh, e4.sndtmd, e4.qu }
            join e5 in WmsDc.view_pssndgds on new { e4.dh, e4.clsid, e4.sndtmd, e.rcvdptid, e4.qu } equals new { e5.dh, e5.clsid, e5.sndtmd, e5.rcvdptid, e5.qu }
            join e6 in WmsDc.dpt on e.rcvdptid equals e6.dptid
            where e.wmsno == wmsno &&
            e.savdptid == LoginInfo.DefSavdptid &&
            dpts.Contains(e.dptid.Trim()) &&
            e.bllid == WMSConst.BLL_TYPE_DISPATCH &&
            e5.busid.Trim().Substring(e5.busid.Trim().Length - 1, 1) == checi &&
            e.wmsbllid == bllid.Trim() &&
            e.chkflg == GetN() &&
            e.bzflg == GetN() &&
            e1.gdsid == gdsid.Trim()
            //&& (e1.bzflg == GetN() || e1.bzflg == null)
            orderby e1.bzflg, e1.gdsid
            select e1;
            var arrqrystkot = qrystkot.ToArray();

            if (arrqrystkot.Length <= 0)
            {
                return(RNoData("N0067"));
            }
            stkotdtl[] stkotdtl = arrqrystkot;
            //得到wms_cang的信息
            var qrycang = from e in WmsDc.wms_cang
                          where e.wmsno == wmsno.Trim() &&
                          e.bllid == bllid.Trim() &&
                          qus.Contains(e.qu)
                          select e;
            var arrqrycang = qrycang.ToArray();

            if (arrqrycang.Length <= 0)
            {
                return(RNoData("N0068"));
            }
            wms_cang[] wms_cang = arrqrycang;
            //得到wms_cang的信息
            var qrycangdtl = from e in WmsDc.wms_cangdtl
                             where e.wmsno == wmsno.Trim() &&
                             e.bllid == bllid.Trim() &&
                             e.gdsid == gdsid.Trim()
                             select e;
            var arrqrycangdtl = qrycangdtl.ToArray();

            if (arrqrycangdtl.Length <= 0)
            {
                return(RNoData("N0069"));
            }
            wms_cangdtl[] wms_cangdtl = arrqrycangdtl;

            if (cutgds.chkflg == GetY())
            {
                return(RInfo("I0103"));
            }

            // done: 取消对 5、分货确认时,发现数量小于应分货数量,要循环扣除对应的stkotdtl里面的qty 的注释
            if (qty < stkotdtl.Sum(e => e.qty))
            {
                Log.i(LoginInfo.Usrid, Mdlid, wmsno, bllid, Mdldes,
                      gdsid.Trim() + ":应拣:" + Math.Round(stkotdtl.Sum(e => e.qty), 4, MidpointRounding.AwayFromZero)
                      + ";实拣:" + Math.Round(qty, 4, MidpointRounding.AwayFromZero),
                      "", LoginInfo.DefSavdptid);
                double diff = stkotdtl.Sum(e => e.qty) - qty;

                //扣减stkotdtl里面的库存
                RedcStkotQty(stkotdtl, diff);
            }

            //修改wms_cutgds中的ckr, chkflg, chkdat,qty
            cutgds.ckr    = LoginInfo.Usrid;
            cutgds.chkflg = GetY();
            cutgds.qty    = qty;
            cutgds.chkdat = GetCurrentDate();
            try
            {
                WmsDc.SubmitChanges();
            }
            catch (Exception ex)
            {
                return(RErr(ex.Message, "E0014"));
            }

            return(RSucc("成功", null, "S0059"));
        }