/// <summary>
        /// 配布する
        /// </summary>
        /// <param name="id"></param>
        /// <param name="applyDate"></param>
        /// <returns></returns>
        public async Task <DistributionTask> ApplyAsync(int id, DateTimeOffset applyDate, bool isIndefinitePeriod, bool isUserCreateDateBeforeApproval)
        {
            try
            {
                if (id == 0)
                {
                    throw new Exception("parameter 'id' is required.");
                }
                if (applyDate < DateTimeOffset.Now)
                {
                    throw new Exception("please set a future date for the parameter 'applyDate'.");
                }

                return(await ExecuteAsync(
                           () =>
                {
                    var distributionTask = FindById(id);

                    var distribution = new MDistribution();
                    distribution.Id = distributionTask.Id;
                    distribution.DistributeDate = applyDate;
                    distribution.IsIndefinitePeriod = isIndefinitePeriod;
                    distribution.IsUserCreateDateBeforeApproval = isUserCreateDateBeforeApproval;
                    distribution.BlobName = distributionTask.BlobName;
                    operationHelper.MasterDbRepository.AddDistribution(distribution);
                    operationHelper.MasterDbRepository.SaveChanges();

                    distributionTask.Condition = Entities.Enums.ConditionType.Deployed;
                    operationHelper.MaintenanceDbRepository.SaveChanges();

                    return distributionTask;
                }));
            }
            catch (Exception ex)
            {
                await SendmessageAsync(ex);

                throw;
            }
        }
Exemplo n.º 2
0
        }       //	prepare

        /// <summary>
        /// Process
        /// </summary>
        /// <returns>message</returns>
        protected override String DoIt()
        {
            log.Info("doIt - GL_Distribution_ID=" + GetRecord_ID());
            MDistribution distribution = new MDistribution(GetCtx(), GetRecord_ID(), Get_TrxName());

            if (distribution.Get_ID() == 0)
            {
                throw new Exception("Not found GL_Distribution_ID=" + GetRecord_ID());
            }
            String  error = distribution.Validate();
            Boolean saved = distribution.Save();

            if (error != null)
            {
                throw new Exception(error);
            }
            if (!saved)
            {
                throw new Exception("@NotSaved@");
            }
            return("@OK@");
        } //	doIt
Exemplo n.º 3
0
        /// <summary>
        /// GL Distribution of Fact Lines
        /// </summary>
        /// <returns>true if success</returns>
        public bool Distribute()
        {
            //  no lines -> nothing to distribute
            if (_lines.Count == 0)
            {
                return(true);
            }

            List <FactLine> newLines = new List <FactLine>();

            //	For all fact lines
            for (int i = 0; i < _lines.Count; i++)
            {
                FactLine        dLine         = (FactLine)_lines[i];
                MDistribution[] distributions = MDistribution.Get(dLine.GetAccount(),
                                                                  _postingType, _doc.GetC_DocType_ID());
                //	No Distribution for this line
                if (distributions == null || distributions.Length == 0)
                {
                    continue;
                }
                //	Just the first
                if (distributions.Length > 1)
                {
                    log.Warning("More then one Distributiion for " + dLine.GetAccount());
                }
                MDistribution distribution = distributions[0];
                //	Add Reversal
                FactLine reversal = dLine.Reverse(distribution.GetName());
                log.Info("Reversal=" + reversal);
                newLines.Add(reversal);         //	saved in postCommit
                //	Prepare
                distribution.Distribute(dLine.GetAccount(), dLine.GetSourceBalance(), dLine.GetC_Currency_ID());
                MDistributionLine[] lines = distribution.GetLines(false);
                for (int j = 0; j < lines.Length; j++)
                {
                    MDistributionLine dl = lines[j];
                    if (!dl.IsActive() || Env.Signum(dl.GetAmt()) == 0)
                    {
                        continue;
                    }
                    FactLine factLine = new FactLine(_doc.GetCtx(), _doc.Get_Table_ID(),
                                                     _doc.Get_ID(), 0, _trx);
                    //  Set Info & Account
                    factLine.SetDocumentInfo(_doc, dLine.GetDocLine());
                    factLine.SetAccount(_acctSchema, dl.GetAccount());
                    factLine.SetPostingType(_postingType);
                    if (dl.IsOverwriteOrg())    //	set Org explicitly
                    {
                        factLine.SetAD_Org_ID(dl.GetOrg_ID());
                    }
                    //
                    if (Env.Signum(dl.GetAmt()) < 0)
                    {
                        factLine.SetAmtSource(dLine.GetC_Currency_ID(), null, Math.Abs(dl.GetAmt()));
                    }
                    else
                    {
                        factLine.SetAmtSource(dLine.GetC_Currency_ID(), dl.GetAmt(), null);
                    }
                    //  Convert
                    factLine.Convert();
                    //
                    String description = distribution.GetName() + " #" + dl.GetLine();
                    if (dl.GetDescription() != null)
                    {
                        description += " - " + dl.GetDescription();
                    }
                    factLine.AddDescription(description);
                    //
                    log.Info(factLine.ToString());
                    newLines.Add(factLine);
                }
            }   //	for all lines

            //	Add Lines
            for (int i = 0; i < newLines.Count; i++)
            {
                _lines.Add(newLines[i]);
            }

            return(true);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="distribution"></param>
 internal void AddDistribution(MDistribution distribution)
 {
     this.context.MDistributions.Add(distribution);
 }