Пример #1
0
        /// <summary>
        /// 物资退料
        /// </summary>
        /// <param name="tk_form">单据表单信息</param>
        /// <param name="MSInfos">物资具体信息</param>
        /// <returns></returns>
        public string back(string tk_form, string MSInfos, int wfIdx)
        {
            string   _return = String.Empty, _code = MConvert.getValue(tk_form, "code"), _whId = MConvert.getValue(tk_form, "whId"), _proId = MConvert.getValue(tk_form, "proId");
            string   _wfId = (new WFIndex(wfIdx, api)).addInstance("退料单号:" + _code, "");
            SqlTrans trans = new SqlTrans(api);

            try
            {
                string[] _kv     = MConvert.toKV(tk_form);
                string   _users  = trans.execScalar(MString.getSelectStr(R.Table.WF_INSTANCE, "owner", "id=" + _wfId));
                string   _newID  = trans.addRow(R.Table.TK_WH_BACK, _kv[0] + ",wfId,users,observers", _kv[1] + "," + _wfId + ",'" + _users + "','" + _users + "'");
                string[] infoAry = MSInfos.Split('^');
                for (int i = 0, _len = infoAry.Length; i < _len; i++)
                {
                    string    _sInfo = infoAry[i], _pid = String.Empty, _msId = MConvert.getValue(_sInfo, "msId");
                    string[]  _tKV    = MConvert.toKV(_sInfo);
                    double    _num    = MConvert.getDouble(_sInfo, "number");
                    ArrayList _stocks = trans.execJsonList("select {0} from {1} where msId={2} and remainNum<>0 and batchId<>0 and proId={3} order by cTime desc, id desc;", "id,whId,batchId,batchCode,batchPrice,number,remainNum", R.Table.TK_WH_SEND_DETAIL, _msId, _proId);
                    for (int _n = 0; _n < _stocks.Count; _n++)
                    {
                        if (_num < 0 || _num == 0)
                        {
                            break;
                        }
                        Json   _stock = (Json)_stocks[_n];
                        double _realNum = 0, _price = _stock.getDouble("batchPrice");
                        string _k = String.Empty, _v = String.Empty, _batchId = "0", _batchCode = "", _newWhId = _whId, _sendId = _stock.getValue("id"), _sourceId = _stock.getValue("whId");
                        _num = _num - _stock.getDouble("remainNum");
                        if (Native.isEmpty(_newWhId) || _newWhId == "0")
                        {
                            _newWhId = _sourceId; _batchId = _stock.getValue("batchId"); _batchCode = _stock.getValue("batchCode");
                        }
                        if (_num > 0)
                        {
                            _realNum = _stock.getDouble("remainNum");
                            if (Native.isEmpty(_pid))
                            {
                                _k   = "msId,sourceId,proId,whId,oid,planNum";
                                _v   = _msId + "," + _sourceId + "," + _proId + "," + _newWhId + "," + _newID + "," + MConvert.getValue(_sInfo, "planNum");
                                _pid = trans.execScalar(MString.getInsertStr(R.Table.TK_WH_BACK_DETAIL, _k, _v, true));
                            }
                            _k = "sendId,msId,sourceId,proId,whId,oid,batchId,batchCode,price,number,sum";
                            _v = _sendId + "," + _msId + "," + _sourceId + "," + _proId + "," + _newWhId + "," + _newID + "," + _batchId + ",'" + _batchCode + "'," + _price + "," + _realNum + "," + _price * _realNum;
                            trans.addTreeNode(R.Table.TK_WH_BACK_DETAIL, Convert.ToInt16(_pid), _k, _v);
                            trans.execNonQuery("update " + R.Table.TK_WH_BACK_DETAIL + " set sum=sum+" + (_price * _realNum) + ", number=number+" + _realNum + " where id=" + _pid);
                        }
                        else
                        {
                            _realNum = _stock.getDouble("remainNum") + _num;
                            if (!Native.isEmpty(_pid))
                            {
                                _k = "sendId,msId,sourceId,proId,whId,oid,batchId,batchCode,price,number,sum";
                                _v = _sendId + "," + _msId + "," + _sourceId + "," + _proId + "," + _newWhId + "," + _newID + "," + _batchId + ",'" + _batchCode + "'," + _price + "," + _realNum + "," + _price * _realNum;
                                trans.addTreeNode(R.Table.TK_WH_BACK_DETAIL, Convert.ToInt16(_pid), _k, _v);
                                trans.execNonQuery("update " + R.Table.TK_WH_BACK_DETAIL + " set sum=sum+" + (_price * _realNum) + ", number=number+" + _realNum + " where id=" + _pid);
                            }
                            else
                            {
                                trans.addRow(R.Table.TK_WH_BACK_DETAIL, _tKV[0] + ",sendId,proId,whId,sourceId,oid,batchId,batchCode,price,sum,planSum", _tKV[1] + "," + _sendId + "," + _proId + "," + _newWhId + "," + _sourceId + "," + _newID + "," + _batchId + ",'" + _batchCode + "'," + _price + "," + (_realNum * _price) + "," + (MConvert.getDouble(_sInfo, "planNum") * _price));
                            }
                        }
                    }
                }
                _return = _newID;
                trans.commit();
            }
            catch (Exception e)
            {
                trans.rollback();
                _return = Native.getErrorMsg(e.Message);
            }
            finally
            {
                trans.close();
            }
            return(_return);
        }