/// <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; } }
} // 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
/// <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); }