K/3 Cloud 产品报价单_表单插件开发示例

using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace MyPlugIn.PRODUCTQUOTE.PlugIn
{
    [Description("产品报价单表单插件")]
    public class PlugIn : AbstractDynamicFormPlugIn
    {
        /// <summary>
        /// 数据变更时
        /// </summary>
        /// <param name="e"></param>
        public override void DataChanged(DataChangedEventArgs e)
        {
            List<string> lstField = new List<string>
            {
                "F_KD_SHL",         // 材料损耗率%
                "F_KD_BZGS",        // 标准工时
                "F_KD_GFL",         // 工费率(元/H)
                "F_KD_ZZFYL",       // 制造费用率%
                "F_KD_FTSL",        // 模具分摊数量
                "F_KD_MLL",         // 毛利率
                "F_KD_WBREBATE",    // 外币(Rebate)/客户佣金
                "F_KD_WBHL",        // 汇率
                "F_KD_RMBREBATE",   // 人民币(Rebate)
                "F_KD_TAXRATE",     // 增值税率
                "F_KD_GXFL",        // 管销费率
                "FTAXPRICE",        // 材料含税单价
                "FUSAGE",           // 材料用量
                "FTAXAMOUNT",       // 材料含税金额
                "FMDPRICE"          // 模具单价
            };
            string strKey = e.Field.FieldName.Trim().ToUpper();
            if (lstField.Contains(strKey))
            {
                Compute();
            }
            else if ((strKey == "FSUBMATERIALID") || (strKey == "FBASEUNIT"))
            {
                DynamicObject dynobj = (DynamicObject)this.View.Model.GetValue("FSUBMATERIALID", e.Row);
                DynamicObject dynobjunit = (DynamicObject)this.View.Model.GetValue("FBASEUNIT", e.Row);
                System.Int64 intUnitId = (dynobjunit.IsNullOrEmptyOrWhiteSpace()) ? 0 : (System.Int64)dynobjunit["Id"];

                Boolean blnIsNewMat = true;
                int intFSUPPLIERID = 0;
                Decimal decFCONPRICE = 0;
                Decimal decFMAXTAXPRICE = 0;
                Decimal decFMINTAXPRICE = 0;
                Decimal decFQTAXPRICE = 0;
                System.DateTime? dtFORDEERDATE = null;
                Decimal decFUSAGE = (Decimal)this.Model.GetValue("FUSAGE", e.Row);
                Decimal decAmount = 0;
                if (dynobj.IsNullOrEmptyOrWhiteSpace() == false)
                {
                    System.Int64 intMatId = (System.Int64)dynobj["Id"];
                    string strSql = @"SELECT TOP 1 1 FROM T_PUR_PRICELISTENTRY WHERE FMATERIALID=@MATID ";
                    List<SqlParam> lstParams = new List<SqlParam>();
                    lstParams.Add(new SqlParam("@MATID", KDDbType.Int64, intMatId));
                    DynamicObjectCollection objcol = DBUtils.ExecuteDynamicObject(this.Context, strSql, null, null, System.Data.CommandType.Text, lstParams.ToArray());
                    if ((objcol.IsNullOrEmptyOrWhiteSpace() == false) && (objcol.Count > 0))
                    {
                        blnIsNewMat = false;
                    }
                    lstParams.Clear();
                    strSql = @"/*dialect*/GetPurPrice @MATID,@UNITID ";
                    lstParams.Add(new SqlParam("@MATID", KDDbType.Int64, intMatId));
                    lstParams.Add(new SqlParam("@UNITID", KDDbType.Int64, intUnitId));
                    DynamicObjectCollection objcol2 = DBUtils.ExecuteDynamicObject(this.Context, strSql, null, null, System.Data.CommandType.Text, lstParams.ToArray());
                    if ((objcol2.IsNullOrEmptyOrWhiteSpace() == false) && (objcol2.Count > 0))
                    {
                        DynamicObject dyn1 = objcol2[0];
                        if (dyn1.IsNullOrEmptyOrWhiteSpace() == false)
                        {
                            intFSUPPLIERID = (int)dyn1["FSUPPLIERID"];
                            decFCONPRICE = (Decimal)dyn1["FCONPRICE"];
                            decFMAXTAXPRICE = (Decimal)dyn1["FMAXTAXPRICE"];
                            decFMINTAXPRICE = (Decimal)dyn1["FMINTAXPRICE"];
                            decFQTAXPRICE = (Decimal)dyn1["FQTAXPRICE"];
                            decAmount = decFUSAGE * decFCONPRICE;
                            dtFORDEERDATE = (DateTime?)dyn1["FDATE"];
                        }
                    }
                }
                this.Model.SetValue("FISNEWMAT", blnIsNewMat, e.Row);
                this.Model.SetValue("FSUPPLIERID", intFSUPPLIERID, e.Row);
                this.Model.SetValue("FTAXPRICE", decFCONPRICE, e.Row);
                this.Model.SetValue("FTAXAMOUNT", decAmount, e.Row);
                this.Model.SetValue("FMAXPRICE", decFMAXTAXPRICE, e.Row);
                this.Model.SetValue("FMINPRICE", decFMINTAXPRICE, e.Row);
                this.Model.SetValue("FQPRICE", decFQTAXPRICE, e.Row);
                this.Model.SetValue("FORDERDATE", dtFORDEERDATE, e.Row);
            }
            base.DataChanged(e);
        }

        /// <summary>
        /// 财务计算
        /// </summary>
        private void Compute()
        {
            DynamicObjectCollection dyncolobj = (DynamicObjectCollection)this.Model.DataObject["FEntity"];
            DynamicObjectCollection dyncolmdobj = (DynamicObjectCollection)this.Model.DataObject["FMDEntity"];
            String strFMJFY=(String)this.Model.DataObject["FMJFY"];
            Decimal decSumMatAmount = 0;
            Decimal decSumMdAmount = 0;
            Decimal decAmount = 0;
            Decimal decUsage = 0;
            Decimal decPRICE = 0;
            if (dyncolobj.IsNullOrEmptyOrWhiteSpace() == false && dyncolobj.Count > 0)
            {
                int intRow = 0;
                foreach (DynamicObject dynobj in dyncolobj)
                {
                    decUsage = (Decimal)dynobj["FUSAGE"];
                    decPRICE = (Decimal)dynobj["FTAXPRICE"];
                    decAmount = decUsage * decPRICE;
                    decSumMatAmount = decSumMatAmount + decAmount;
                    dynobj["FTAXAMOUNT"] = decAmount;
                    this.View.UpdateView("FTAXAMOUNT", intRow++);
                }
            }
            if (dyncolmdobj.IsNullOrEmptyOrWhiteSpace() == false && dyncolmdobj.Count > 0)
            {
                foreach (DynamicObject dynobj in dyncolmdobj)
                {
                    decAmount = (Decimal)dynobj["FMDPRICE"];
                    decSumMdAmount = decSumMdAmount + decAmount;
                }
            }

            Decimal decFMATCOST = decSumMatAmount;    // 材料成本
            Decimal decF_KD_SHL = (Decimal)this.Model.DataObject["F_KD_SHL"];  // 材料损耗率%
            Decimal decF_KD_SH = decFMATCOST * decF_KD_SHL / 100;  // 材料损耗=材料成本*材料损耗率%/100
            Decimal decF_KD_HSCLXJ = decFMATCOST + decF_KD_SH;    // 含税材料小计=材料成本+材料损耗
            Decimal decF_KD_WSCLXJ = decF_KD_HSCLXJ * 100 / ((Decimal)this.Model.DataObject["F_KD_TAXRATE"]+100);  // 未税材料小计

            Decimal decF_KD_BZGS = (Decimal)this.Model.DataObject["F_KD_BZGS"];      // 标准工时
            Decimal decF_KD_GFL = (Decimal)this.Model.DataObject["F_KD_GFL"];       // 工费率(元/H)
            Decimal decF_KD_RGCBXJ = decF_KD_BZGS * decF_KD_GFL / 3600;           // 人工成本小计=标准工时*工费率(元/H)/3600

            Decimal decF_KD_ZZFYL = (Decimal)this.Model.DataObject["F_KD_ZZFYL"];   // 制造费用率%
            Decimal decF_KD_SCCBXJ = (decF_KD_ZZFYL == 100) ? 0 : ((decF_KD_WSCLXJ + decF_KD_RGCBXJ) * 100 / (100 - decF_KD_ZZFYL));     // 生产成本小计=(未税材料小计+人工成本小计)*100/(100-制造费用率)

            Decimal decF_KD_MJFY = decSumMdAmount;   // 模具费用
            Decimal decF_KD_FTSL = (Decimal)this.Model.DataObject["F_KD_FTSL"]; // 模具分摊数量
            Decimal decF_KD_MJFTCB = 0;
            if (strFMJFY.IsNullOrEmptyOrWhiteSpace() == false && strFMJFY == "1")  // 模具费用为公司承担时,进行模具成本分摊
            {
                decF_KD_MJFTCB = (decF_KD_FTSL == 0) ? decF_KD_MJFY : (decF_KD_MJFY / decF_KD_FTSL); // 模具分摊成本=模具费用/模具分摊数量
            }
            Decimal decF_KD_MLL = (Decimal)this.Model.DataObject["F_KD_MLL"];    // 毛利率
            Decimal decF_KD_WBREBATE = (Decimal)this.Model.DataObject["F_KD_WBREBATE"]; // 外币(Rebate)/客户佣金
            Decimal decF_KD_WBHL = (Decimal)this.Model.DataObject["F_KD_WBHL"];   // 汇率
           // 外币报价=(生产成本合计 / (1 - 毛利率) + 模具分摊成本 + 外币Rebate) / 汇率
            Decimal decF_KD_WBBJ = ((decF_KD_MLL == 100) || (decF_KD_WBHL == 0)) ? 0 : ((decF_KD_SCCBXJ * 100 / (100 - decF_KD_MLL) + decF_KD_MJFTCB + decF_KD_WBREBATE) / decF_KD_WBHL);
            Decimal decF_KD_RMBREBATE = (Decimal)this.Model.DataObject["F_KD_RMBREBATE"];                   // 人民币(Rebate)
            Decimal decF_KD_TAXRATE = (Decimal)this.Model.DataObject["F_KD_TAXRATE"];                       // 增值税率
           // 人民币报价(含税)=(生产成本合计/(1-毛利率)+模具分摊成本+人民币Rebate)*(1+增值税率)
            Decimal decF_KD_RMBBJ = (decF_KD_MLL == 100) ? 0 : ((decF_KD_SCCBXJ * 100 / (100 - decF_KD_MLL) + decF_KD_MJFTCB + decF_KD_RMBREBATE) * (100 + decF_KD_TAXRATE) / 100);     // 人民币报价(含税)=(生产成本合计/(1-毛利率)+模具分摊成本+人民币Rebate)*(1+增值税率)
            Decimal decF_KD_WBJSR = (decF_KD_WBBJ - decF_KD_WBREBATE) * decF_KD_WBHL;                       // 外币净收入=(外币报价 - 外币Rebate) * 汇率
            Decimal decF_KD_RMBJSR = decF_KD_RMBBJ * 100 / (100 + decF_KD_TAXRATE) - decF_KD_RMBREBATE;     // 人民币净收入=人民币报价(含税)/(1+增值税率)-人民币Rebate
            Decimal decF_KD_BWBJSR = (decF_KD_RMBJSR > 0) ? decF_KD_RMBJSR : decF_KD_WBJSR; // 本位币净收入 //取值(人民币净收入 > 0, 人民币净收入, 外币净收入)
            Decimal decF_KD_MLR = decF_KD_BWBJSR * decF_KD_MLL / 100;     // 毛利润=本位币净收入*毛利率 
            Decimal decF_KD_GXFL = (Decimal)this.Model.DataObject["F_KD_GXFL"];  // 管销费率
            Decimal decF_KD_GXFY = decF_KD_BWBJSR * decF_KD_GXFL / 100;    // 管销费用=本位币净收入*管销费率
            Decimal decF_KD_SQLR = decF_KD_MLR - decF_KD_GXFY;      // 税前利润=毛利润-管销费用
            Decimal decF_KD_SQLRL = (decF_KD_BWBJSR == 0) ? 0 : (decF_KD_SQLR / decF_KD_BWBJSR * 100);      // 税前利润率=税前利润/本位币净收入

            this.Model.SetValue("FMATCOST", decFMATCOST);    // 材料成本
            this.Model.SetValue("F_KD_SH", decF_KD_SH);    // 材料损耗
            this.Model.SetValue("F_KD_HSCLXJ", decF_KD_HSCLXJ);  // 含税材料小计
            this.Model.SetValue("F_KD_WSCLXJ", decF_KD_WSCLXJ);  // 未税材料小计
            this.Model.SetValue("F_KD_RGCBXJ", decF_KD_RGCBXJ);  // 人工成本小计
            this.Model.SetValue("F_KD_MJFY", decF_KD_MJFY);      // 模具费用
            this.Model.SetValue("F_KD_MJFTCB", decF_KD_MJFTCB);  // 模具分摊成本
            this.Model.SetValue("F_KD_SCCBXJ", decF_KD_SCCBXJ); // 生产成本小计
            this.Model.SetValue("F_KD_WBBJ", decF_KD_WBBJ);      // 外币报价
            this.Model.SetValue("F_KD_RMBBJ", decF_KD_RMBBJ);    // 人民币报价(含税)
            this.Model.SetValue("F_KD_WBJSR", decF_KD_WBJSR);    // 外币净收入
            this.Model.SetValue("F_KD_RMBJSR", decF_KD_RMBJSR);  // 人民币净收入
            this.Model.SetValue("F_KD_BWBJSR", decF_KD_BWBJSR);  // 本位币净收入
            this.Model.SetValue("F_KD_MLR", decF_KD_MLR);        // 毛利润
            this.Model.SetValue("F_KD_GXFY", decF_KD_GXFY);      // 管销费用
            this.Model.SetValue("F_KD_SQLR", decF_KD_SQLR);      // 税前利润
            this.Model.SetValue("F_KD_SQLRL", decF_KD_SQLRL);    // 税前利润率
        }
    }
}
 

猜你喜欢

转载自www.cnblogs.com/lxh168/p/9265473.html