Пример #1
0
        private static void GeneratePzYsyf(IRepository rep, 凭证 pz)
        {
            rep.Initialize(pz.凭证费用明细, pz);

            foreach (凭证费用明细 pzfymx in pz.凭证费用明细)
            {
                rep.Initialize(pzfymx.费用, pzfymx);

                费用项 fyx = EntityBufferCollection.Instance.Get <费用项>(pzfymx.费用项编号);
                if (pzfymx.费用.Count > 0)
                {
                    // 通过对账单包进来的
                    if (fyx.应收应付类型 == 应收应付类型.业务)
                    {
                        应收应付款 ysyfk = new 应收应付款();
                        ysyfk.IsActive = true;
                        ysyfk.费用项编号    = pzfymx.费用项编号;
                        ysyfk.结算期限     = pz.日期;
                        ysyfk.金额       = -pzfymx.金额; // 取反
                        ysyfk.日期       = pz.日期;
                        ysyfk.收付标志     = pzfymx.收付标志;
                        ysyfk.相关人编号    = pzfymx.相关人编号;
                        ysyfk.业务类型编号   = pzfymx.业务类型编号.Value;
                        ysyfk.应收应付源    = pz;
                        ysyfk.备注       = pzfymx.备注;

                        (new HdBaseDao <应收应付款>()).Save(rep, ysyfk);
                    }
                    continue;
                }


                if (fyx.应收应付类型 == 应收应付类型.业务)
                {
                    应收应付款 ysyfk = new 应收应付款();
                    ysyfk.IsActive = true;
                    ysyfk.费用项编号    = pzfymx.费用项编号;
                    ysyfk.结算期限     = pz.日期;
                    ysyfk.金额       = -pzfymx.金额; // 取反
                    ysyfk.日期       = pz.日期;
                    ysyfk.收付标志     = pzfymx.收付标志;
                    ysyfk.相关人编号    = pzfymx.相关人编号;
                    ysyfk.业务类型编号   = pzfymx.业务类型编号.Value;
                    ysyfk.应收应付源    = pz;
                    ysyfk.备注       = pzfymx.备注;

                    (new HdBaseDao <应收应付款>()).Save(rep, ysyfk);
                }
                else if (fyx.应收应付类型 == 应收应付类型.借款类型)
                {
                    应收应付款 ysyfk = new 应收应付款();
                    ysyfk.IsActive = true;
                    ysyfk.费用项编号    = "002"; // 其他

                    //IList<GridColumnInfo> infos = new List<GridColumnInfo> {
                    //        new GridColumnInfo { Caption = "结算期限", DataControlVisible = "True", DataControlType = "MyDatePicker", PropertyName = "结算期限", NotNull = "True"} ,
                    //    };
                    //ArchiveDataControlForm form = new ArchiveDataControlForm(new ControlManager(null), infos);
                    //if (form.ShowDialog() == DialogResult.OK)
                    //{
                    //    ysyfk.结算期限 = (DateTime)form.DataControls["结算期限"].SelectedDataValue;
                    //}
                    //else
                    //{
                    //    throw new InvalidUserOperationException("借款必须填写结算期限!");
                    //}
                    ysyfk.结算期限   = pzfymx.结算期限.HasValue ? pzfymx.结算期限.Value : pz.日期;
                    ysyfk.金额     = pzfymx.金额;
                    ysyfk.日期     = pz.日期;
                    ysyfk.收付标志   = pzfymx.收付标志 == 收付标志.付 ? 收付标志.收 : 收付标志.付;
                    ysyfk.相关人编号  = pzfymx.相关人编号;
                    ysyfk.业务类型编号 = pzfymx.业务类型编号.Value;
                    ysyfk.应收应付源  = pz;
                    ysyfk.备注     = pzfymx.备注;

                    (new HdBaseDao <应收应付款>()).Save(rep, ysyfk);
                }
                else if (fyx.应收应付类型 == 应收应付类型.管理费用类型)
                {
                    非业务费用 fy = new 非业务费用();
                    fy.IsActive = true;

                    fy.费用项编号 = pzfymx.费用项编号;
                    fy.金额    = pzfymx.金额;
                    fy.收付标志  = pzfymx.收付标志;
                    fy.相关人编号 = pzfymx.相关人编号;
                    fy.备注    = pzfymx.备注;

                    if (string.IsNullOrEmpty(s_非业务默认费用实体))
                    {
                        throw new ArgumentException("必须指定一个非业务默认费用实体!");
                    }
                    fy.费用实体   = rep.Get <费用实体>(new Guid(s_非业务默认费用实体));
                    fy.凭证费用明细 = pzfymx;

                    (new 非业务费用Dao()).Save(rep, fy);
                }
                else if (fyx.应收应付类型 == 应收应付类型.待分摊类型)
                {
                    应收应付款 ysyfk = new 应收应付款();
                    ysyfk.IsActive = true;
                    ysyfk.费用项编号    = "004"; // 其他
                    ysyfk.结算期限     = pzfymx.结算期限.HasValue ? pzfymx.结算期限.Value : pz.日期;
                    ysyfk.金额       = pzfymx.金额;
                    ysyfk.日期       = pz.日期;
                    ysyfk.收付标志     = pzfymx.收付标志 == 收付标志.付 ? 收付标志.收 : 收付标志.付;
                    ysyfk.相关人编号    = "900031";
                    ysyfk.业务类型编号   = pzfymx.业务类型编号.Value;
                    ysyfk.应收应付源    = pz;
                    ysyfk.备注       = pzfymx.备注;

                    (new HdBaseDao <应收应付款>()).Save(rep, ysyfk);
                }
                else if (fyx.应收应付类型 == 应收应付类型.其他)
                {
                }
            }
        }
Пример #2
0
        internal static void GenerateDzdYsyf(IRepository rep, 对账单 entity)
        {
            if (!entity.Submitted)
            {
                throw new InvalidUserOperationException("对账单还未提交!");
            }

            rep.Initialize(entity.费用, entity);

            entity.应收应付款 = new List <应收应付款>();

            // 业务类型编号, 相关人编号 // 费用项编号 = "000"

            Dictionary <Tuple <int, string>, IList <费用> > dict = Utility.GroupFyToDzdYsyf(entity.费用);

            foreach (KeyValuePair <Tuple <int, string>, IList <费用> > kvp in dict)
            {
                decimal sum = 0;

                应收应付款 ysyfk = new 应收应付款();

                if (entity.对账单类型 == (int)财务对账单类型.固定资产折旧)
                {
                    foreach (费用 k4 in kvp.Value)
                    {
                        if (k4.收付标志 == 收付标志.付)
                        {
                            sum -= k4.金额.Value;
                        }
                        else
                        {
                            sum += k4.金额.Value;
                        }
                    }

                    ysyfk.费用项编号  = "004";
                    ysyfk.收付标志   = 收付标志.收;
                    ysyfk.业务类型编号 = 24;
                }
                else
                {
                    foreach (费用 k4 in kvp.Value)
                    {
                        if (k4.收付标志 == entity.收付标志)
                        {
                            sum += k4.金额.Value;
                        }
                        else
                        {
                            sum -= k4.金额.Value;
                        }
                    }

                    ysyfk.费用项编号  = "000";
                    ysyfk.收付标志   = entity.收付标志;
                    ysyfk.业务类型编号 = kvp.Key.Item1;
                }

                ysyfk.结算期限  = entity.结算期限.HasValue ? entity.结算期限.Value : entity.关账日期.Value;
                ysyfk.金额    = sum;
                ysyfk.日期    = entity.关账日期.Value;
                ysyfk.相关人编号 = kvp.Key.Item2;
                ysyfk.应收应付源 = entity;

                (new HdBaseDao <应收应付款>()).Save(rep, ysyfk);

                entity.应收应付款.Add(ysyfk);
            }
        }
Пример #3
0
        internal static void GenerateDzdYsyf(IRepository rep, 对账单 entity)
        {
            if (entity.对账单类型 == (int)货代对账单类型.自动凭证应付对账单)
            {
                return;
            }

            if (!entity.Submitted)
            {
                throw new InvalidUserOperationException("对账单还未提交!");
            }

            rep.Initialize(entity.费用, entity);

            entity.应收应付款 = new List <应收应付款>();

            // 业务类型编号, 相关人编号 // 费用项编号 = "000"
            Dictionary <Tuple <int, string, string>, IList <费用> > dict;

            dict = Feng.Utils.CollectionHelper.Group <费用, Tuple <int, string, string> >(entity.费用,
                                                                                        new Feng.Utils.CollectionHelper.GetGroupKey <费用, Tuple <int, string, string> >(delegate(费用 i)
            {
                if (!i.费用类别编号.HasValue ||
                    string.IsNullOrEmpty(i.相关人编号) ||
                    !i.金额.HasValue)
                {
                    return(null);
                }
                return(new Tuple <int, string, string>(i.费用实体.费用实体类型编号, i.相关人编号, i.费用类别.大类));
            }));


            foreach (KeyValuePair <Tuple <int, string, string>, IList <费用> > kvp in dict)
            {
                decimal sum = 0;
                foreach (费用 k4 in kvp.Value)
                {
                    if (k4.收付标志 == entity.收付标志)
                    {
                        sum += k4.金额.Value;
                    }
                    else
                    {
                        sum -= k4.金额.Value;
                    }
                }

                应收应付款 ysyfk = new 应收应付款();
                if (kvp.Key.Item3 == "业务常规")
                {
                    ysyfk.费用项编号 = "000";
                }
                else
                {
                    ysyfk.费用项编号 = "001";
                }
                ysyfk.结算期限   = entity.结算期限.HasValue ? entity.结算期限.Value : entity.关账日期.Value;
                ysyfk.金额     = sum;
                ysyfk.日期     = entity.关账日期.Value;
                ysyfk.收付标志   = entity.收付标志;
                ysyfk.相关人编号  = kvp.Key.Item2;
                ysyfk.业务类型编号 = kvp.Key.Item1;
                ysyfk.应收应付源  = entity;

                (new HdBaseDao <应收应付款>()).Save(rep, ysyfk);

                entity.应收应付款.Add(ysyfk);
            }
        }