/** * Copy Phases/Tasks from other Project * @param fromProject project * @return number of items copied */ public int CopyPhasesFrom(MProject fromProject) { if (IsProcessed() || fromProject == null) { return(0); } int count = 0; int taskCount = 0; // Get Phases MProjectPhase[] myPhases = GetPhases(); MProjectPhase[] fromPhases = fromProject.GetPhases(); // Copy Phases for (int i = 0; i < fromPhases.Length; i++) { // Check if Phase already exists int C_Phase_ID = fromPhases[i].GetC_Phase_ID(); bool exists = false; if (C_Phase_ID == 0) { exists = false; } else { for (int ii = 0; ii < myPhases.Length; ii++) { if (myPhases[ii].GetC_Phase_ID() == C_Phase_ID) { exists = true; break; } } } // Phase exist if (exists) { log.Info("Phase already exists here, ignored - " + fromPhases[i]); } else { MProjectPhase toPhase = new MProjectPhase(GetCtx(), 0, Get_TrxName()); PO.CopyValues(fromPhases[i], toPhase, GetAD_Client_ID(), GetAD_Org_ID()); toPhase.SetC_Project_ID(GetC_Project_ID()); toPhase.SetC_Order_ID(0); toPhase.SetIsComplete(false); if (toPhase.Save()) { count++; taskCount += toPhase.CopyTasksFrom(fromPhases[i]); } } } if (fromPhases.Length != count) { log.Warning("Count difference - Project=" + fromPhases.Length + " <> Saved=" + count); } return(count + taskCount); }
/// <summary> /// Copy Tasks from other Phase /// </summary> /// <param name="fromPhase">from phase</param> /// <returns>number of tasks copied</returns> public int CopyTasksFrom(MProjectPhase fromPhase) { if (fromPhase == null) { return(0); } int count = 0; // MProjectTask[] myTasks = GetTasks(); MProjectTask[] fromTasks = fromPhase.GetTasks(); // Copy Project Tasks for (int i = 0; i < fromTasks.Length; i++) { // Check if Task already exists int C_Task_ID = fromTasks[i].GetC_Task_ID(); bool exists = false; if (C_Task_ID == 0) { exists = false; } else { for (int ii = 0; ii < myTasks.Length; ii++) { if (myTasks[ii].GetC_Task_ID() == C_Task_ID) { exists = true; break; } } } // Phase exist if (exists) { log.Info("Task already exists here, ignored - " + fromTasks[i]); } else { MProjectTask toTask = new MProjectTask(GetCtx(), 0, Get_TrxName()); PO.CopyValues(fromTasks[i], toTask, GetAD_Client_ID(), GetAD_Org_ID()); toTask.SetC_ProjectPhase_ID(GetC_ProjectPhase_ID()); if (toTask.Save()) { count++; } } } if (fromTasks.Length != count) { log.Warning("Count difference - ProjectPhase=" + fromTasks.Length + " <> Saved=" + count); } return(count); }
protected override bool AfterSave(bool newRecord, bool success) { //Used transaction object because total was not updating on header string isCam = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsCampaign FROM C_Project WHERE C_Project_ID = " + GetC_Project_ID(), null, Get_TrxName())); string isOpp = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsOpportunity FROM C_Project WHERE C_Project_ID = " + GetC_Project_ID(), null, Get_TrxName())); if (isOpp.Equals("N") && isCam.Equals("N")) { // set sum of total amount of phase tab to project tab, similalary Commitment amount MProject project = new MProject(GetCtx(), GetC_Project_ID(), Get_TrxName()); project.SetPlannedAmt(Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_Projectphase pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID(), null, Get_TrxName()))); project.SetCommittedAmt(Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.CommittedAmt),0) FROM C_Projectphase pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID(), null, Get_TrxName()))); if (!project.Save()) { } // set sum of planned margin from task line to project tab string Sql = @"SELECT SUM(pl.PlannedMarginAmt) , SUM(pl.PlannedQty) FROM c_Project p INNER JOIN c_projectphase pp ON p.c_project_id = pp.c_project_id INNER JOIN c_projecttask pt ON pp.c_projectphase_id = pt.c_projectphase_id INNER JOIN c_projectline pl ON pl.c_projecttask_id = pt.c_projecttask_id WHERE p.c_project_id = " + project.GetC_Project_ID(); DataSet ds = new DataSet(); ds = DB.ExecuteDataset(Sql, null, Get_TrxName()); if (ds != null) { if (ds.Tables[0].Rows.Count > 0) { project.SetPlannedMarginAmt(Util.GetValueOfDecimal(ds.Tables[0].Rows[0][0])); project.SetPlannedQty(Util.GetValueOfDecimal(ds.Tables[0].Rows[0][1])); project.Save(); } } ds.Dispose(); //Set Total Amount Of Phase Line on Phase Tab MProjectPhase prjph = null; if (GetC_Project_ID() != 0) { isCam = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsCampaign FROM C_Project WHERE C_Project_ID = " + GetC_Project_ID(), null, Get_TrxName())); } if (isCam.Equals("N")) // Project Window { //Used transaction object because total was not updating on header prjph = new MProjectPhase(GetCtx(), GetC_ProjectPhase_ID(), Get_TrxName()); decimal plnAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(PlannedAmt),0) FROM C_ProjectLine WHERE IsActive= 'Y' AND C_ProjectPhase_ID= " + GetC_ProjectPhase_ID(), null, Get_TrxName())); DB.ExecuteQuery("UPDATE C_ProjectPhase SET PlannedAmt=" + plnAmt + " WHERE C_ProjectPhase_ID=" + GetC_ProjectPhase_ID(), null, Get_TrxName()); } } return(true); }
/// <summary> /// Copy Constructor /// </summary> /// <param name="phase">parent</param> /// <param name="task">type copy</param> public MProjectTask(MProjectPhase phase, MProjectTypeTask task) : this(phase) { SetC_Task_ID(task.GetC_Task_ID()); // FK SetSeqNo(task.GetSeqNo()); SetName(task.GetName()); SetDescription(task.GetDescription()); SetHelp(task.GetHelp()); if (task.GetM_Product_ID() != 0) { SetM_Product_ID(task.GetM_Product_ID()); } SetQty(task.GetStandardQty()); }
/** * Get Project Phases * @return Array of phases */ public MProjectPhase[] GetPhases() { List <MProjectPhase> list = new List <MProjectPhase>(); String sql = "SELECT * FROM C_ProjectPhase WHERE C_Project_ID=" + GetC_Project_ID() + " ORDER BY SeqNo"; DataTable dt = null; IDataReader idr = null; try { idr = DataBase.DB.ExecuteReader(sql, null, Get_TrxName()); dt = new DataTable(); dt.Load(idr); idr.Close(); foreach (DataRow dr in dt.Rows) { list.Add(new MProjectPhase(GetCtx(), dr, Get_TrxName())); } } catch (Exception ex) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, sql, ex); } finally { if (idr != null) { idr.Close(); } dt = null; } MProjectPhase[] retValue = new MProjectPhase[list.Count]; retValue = list.ToArray(); return(retValue); }
private void UpdateHeader() { int projID = 0; string isCam = ""; string isOpp = ""; string Sql = "SELECT C_Project_ID FROM C_ProjectPhase WHERE C_ProjectPhase_ID in(select C_ProjectPhase_ID FROM" + " C_ProjectTask WHERE C_ProjectTask_ID =" + GetC_ProjectTask_ID() + ")"; //Used transaction object because total was not updating on header projID = Util.GetValueOfInt(DB.ExecuteScalar(Sql, null, Get_TrxName())); if (projID != 0) { //Used transaction object because total was not updating on header isOpp = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsOpportunity FROM C_Project WHERE C_Project_ID = " + projID, null, Get_TrxName())); isCam = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsCampaign FROM C_Project WHERE C_Project_ID = " + projID, null, Get_TrxName())); } if (isCam.Equals("Y")) // Campaign Window { //Used transaction object because total was not updating on header MProject prj = new MProject(GetCtx(), projID, null); decimal plnAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(PlannedAmt),0) FROM C_ProjectTask WHERE IsActive = 'Y' AND " + "C_ProjectPhase_ID in (SELECT C_ProjectPhase_ID FROM C_ProjectPhase WHERE C_Project_ID = " + projID + ")", null, Get_TrxName())); prj.SetPlannedAmt(plnAmt); prj.Save(); } //Amit else if (isOpp.Equals("N") && isCam.Equals("N")) { // set sum of total amount of task tab to phase tab, similalary Commitment amount MProjectPhase phase = new MProjectPhase(GetCtx(), GetC_ProjectPhase_ID(), Get_TrxName()); phase.SetPlannedAmt(Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectTask pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectPhase_ID = " + GetC_ProjectPhase_ID(), null, Get_TrxName()))); phase.SetCommittedAmt(Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.CommittedAmt),0) FROM C_ProjectTask pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectPhase_ID = " + GetC_ProjectPhase_ID(), null, Get_TrxName()))); if (!phase.Save()) { } } //Amit }
/** * Copy Phases from Type * @param type Project Type * @return count */ public int CopyPhasesFrom(MProjectType type) { // create phases int count = 0; int taskCount = 0; MProjectTypePhase[] typePhases = type.GetPhases(); for (int i = 0; i < typePhases.Length; i++) { MProjectPhase toPhase = new MProjectPhase(this, typePhases[i]); if (toPhase.Save()) { count++; taskCount += toPhase.CopyTasksFrom(typePhases[i]); } } log.Fine("#" + count + "/" + taskCount + " - " + type); if (typePhases.Length != count) { log.Log(Level.SEVERE, "Count difference - Type=" + typePhases.Length + " <> Saved=" + count); } return(count); }
/// <summary> /// Update Header /// </summary> private void UpdateHeader() { int id = GetC_ProjectTask_ID(); int projID = 0; if (id == 0) { projID = GetC_Project_ID(); // Marketing Campaign Window } else { //Used transaction because total was not updating on header string Sql = "SELECT C_Project_ID FROM C_ProjectPhase WHERE C_ProjectPhase_ID in(select C_ProjectPhase_ID FROM" + " C_ProjectTask WHERE C_ProjectTask_ID =" + id + ")"; projID = Util.GetValueOfInt(DB.ExecuteScalar(Sql, null, Get_TrxName())); } //Used transaction because total was not updating on header string sql = "SELECT IsOpportunity FROM C_Project WHERE C_Project_ID = " + projID; string isOpp = Util.GetValueOfString(DB.ExecuteScalar(sql, null, Get_TrxName())); //Amit string isCam = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsCampaign FROM C_Project WHERE C_Project_ID = " + projID, null, Get_TrxName())); if (isOpp.Equals("N") && isCam.Equals("N") && id != 0) { // set sum of planned Amount from task line to task MProjectTask tsk = new MProjectTask(GetCtx(), id, Get_Trx()); //Used transaction because total was not updating on header decimal plannedAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectTask_ID = " + id, null, Get_TrxName())); tsk.SetPlannedAmt(plannedAmt); tsk.Save(); } //Amit else if (isOpp.Equals("N") && isCam.Equals("N") && id == 0 && GetC_ProjectPhase_ID() != 0) { //Used transaction because total was not updating on header MProjectPhase projectPhase = new MProjectPhase(GetCtx(), GetC_ProjectPhase_ID(), Get_TrxName()); decimal plnAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectPhase_ID = " + GetC_ProjectPhase_ID() + " AND pl.C_Project_ID = " + projID, null, Get_TrxName())); projectPhase.SetPlannedAmt(plnAmt); projectPhase.Save(); } else if (isOpp.Equals("Y")) // Opportunity Window { //Used transaction because total was not updating on header MProject prj = new MProject(GetCtx(), projID, Get_TrxName()); decimal plnAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + projID, null, Get_TrxName())); prj.SetPlannedAmt(plnAmt); prj.Save(); if (VAdvantage.Utility.Env.IsModuleInstalled("VA077_")) { sql = @"UPDATE C_Project SET VA077_TotalMarginAmt=(SELECT ROUND(Sum(VA077_MarginAmt),2) FROM C_ProjectLine WHERE C_PROJECT_ID=" + projID + @" AND IsActive='Y'), VA077_TotalPurchaseAmt=(SELECT ROUND(Sum(VA077_PurchaseAmt),2) FROM C_ProjectLine WHERE C_PROJECT_ID=" + projID + @" AND IsActive='Y'), VA077_MarginPercent=(SELECT CASE WHEN Sum(PlannedAmt) > 0 Then ROUND(((Sum(PlannedAmt)- Sum(NVL(VA077_PurchaseAmt,0)))/Sum(PlannedAmt)*100),2) ELSE 0 END FROM C_ProjectLine WHERE C_PROJECT_ID=" + projID + @" AND IsActive='Y') WHERE C_Project_ID=" + projID; int no = DB.ExecuteQuery(sql, null, Get_TrxName()); if (no != 1) { log.Log(Level.SEVERE, "updateHeader - #" + no); } } } else if (id != 0) { MProjectTask tsk = new MProjectTask(GetCtx(), id, Get_TrxName()); //Used transaction because total was not updating on header decimal plannedAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectTask_ID = " + id, null, Get_TrxName())); tsk.SetPlannedAmt(plannedAmt); tsk.Save(); } else { sql = "UPDATE C_Project p SET " + "PlannedAmt=(SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",PlannedQty=(SELECT COALESCE(SUM(pl.PlannedQty),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",PlannedMarginAmt=(SELECT COALESCE(SUM(pl.PlannedMarginAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",CommittedAmt=(SELECT COALESCE(SUM(pl.CommittedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",CommittedQty=(SELECT COALESCE(SUM(pl.CommittedQty),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",InvoicedAmt=(SELECT COALESCE(SUM(pl.InvoicedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ", InvoicedQty =(SELECT COALESCE(SUM(pl.InvoicedQty),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + " WHERE p.C_Project_ID=" + GetC_Project_ID(); int no = DB.ExecuteQuery(sql, null, Get_TrxName()); if (no != 1) { log.Log(Level.SEVERE, "updateHeader - #" + no); } } }
/// <summary> /// Before Save /// </summary> /// <param name="newRecord">new</param> /// <returns>true</returns> protected override bool BeforeSave(bool newRecord) { if (GetLine() == 0) { SetLine(); } // Work done for Purchase Price and Mergin calculation if (Env.IsModuleInstalled("VA077_") && Get_ColumnIndex("VA077_PurchasePrice") >= 0 && Util.GetValueOfDecimal(Get_Value("VA077_PurchasePrice")).Equals(0)) { if (GetProject() != null && _parent.IsOpportunity() && Util.GetValueOfInt(_parent.Get_Value("PO_PriceList_ID")) > 0) { Set_Value("VA077_PurchasePrice", GetPurchasePrice()); // Calculate Purchase Amount Decimal purchaseAmt = Decimal.Multiply(GetPlannedQty(), Util.GetValueOfDecimal(Get_Value("VA077_PurchasePrice"))); if (Env.Scale(purchaseAmt) > GetCurPrecision()) { purchaseAmt = Decimal.Round(purchaseAmt, GetCurPrecision(), MidpointRounding.AwayFromZero); } Set_Value("VA077_PurchaseAmt", purchaseAmt); } // Calculate Margin Amount Decimal marginEach = Decimal.Subtract(GetPlannedPrice(), Util.GetValueOfDecimal(Get_Value("VA077_PurchasePrice"))); Set_Value("VA077_MarginAmt", Decimal.Multiply(marginEach, GetPlannedQty())); // Calculate Margin Percentage Decimal marginPer = 0; if (GetPlannedPrice() > 0) { marginPer = Decimal.Round(Decimal.Multiply(Decimal.Divide(marginEach, GetPlannedPrice()) , Env.ONEHUNDRED), GetCurPrecision(), MidpointRounding.AwayFromZero); } Set_Value("VA077_MarginPercent", marginPer); } // Planned Amount - Currency Precision Decimal plannedAmt = Decimal.Multiply(GetPlannedQty(), GetPlannedPrice()); if (Env.Scale(plannedAmt) > GetCurPrecision()) { //plannedAmt.setScale(GetCurPrecision(), Decimal.ROUND_HALF_UP); Decimal.Round(plannedAmt, GetCurPrecision(), MidpointRounding.AwayFromZero); } SetPlannedAmt(plannedAmt); // Planned Margin if (Is_ValueChanged("M_Product_ID") || Is_ValueChanged("M_Product_Category_ID") || Is_ValueChanged("PlannedQty") || Is_ValueChanged("PlannedPrice")) { if (GetM_Product_ID() != 0) { Decimal marginEach = Decimal.Subtract(GetPlannedPrice(), GetLimitPrice()); SetPlannedMarginAmt(Decimal.Multiply(marginEach, GetPlannedQty())); } else if (GetM_Product_Category_ID() != 0) { MProductCategory category = MProductCategory.Get(GetCtx(), GetM_Product_Category_ID()); Decimal marginEach = category.GetPlannedMargin(); SetPlannedMarginAmt(Decimal.Multiply(marginEach, GetPlannedQty())); } } // Phase/Task if (Is_ValueChanged("C_ProjectTask_ID") && GetC_ProjectTask_ID() != 0) { MProjectTask pt = new MProjectTask(GetCtx(), GetC_ProjectTask_ID(), Get_TrxName()); if (pt == null || pt.Get_ID() == 0) { log.Warning("Project Task Not Found - ID=" + GetC_ProjectTask_ID()); return(false); } else { SetC_ProjectPhase_ID(pt.GetC_ProjectPhase_ID()); } } if (Is_ValueChanged("C_ProjectPhase_ID") && GetC_ProjectPhase_ID() != 0) { MProjectPhase pp = new MProjectPhase(GetCtx(), GetC_ProjectPhase_ID(), Get_TrxName()); if (pp == null || pp.Get_ID() == 0) { log.Warning("Project Phase Not Found - " + GetC_ProjectPhase_ID()); return(false); } else { SetC_Project_ID(pp.GetC_Project_ID()); } } return(true); }
/// <summary> /// To copy details from one project to another /// </summary> /// <param name="fromProject">From Project</param> /// <param name="toProject">To Project</param> /// <returns>No Of Lines copied</returns> public int CopyDetailsFrom(MProject fromProject, MProject toProject) { if (IsProcessed() || fromProject == null || toProject == null) { return(0); } int count = 0; ValueNamePair pp = null; StringBuilder msg = new StringBuilder(); #region create lines for project if (toProject.GetProjectLineLevel().Equals(PROJECTLINELEVEL_Project)) { MProjectLine[] fromLines = fromProject.GetLines(); MProjectLine line = null; for (int i = 0; i < fromLines.Length; i++) { line = new MProjectLine(GetCtx(), 0, fromProject.Get_TrxName()); PO.CopyValues(fromLines[i], line, GetAD_Client_ID(), GetAD_Org_ID()); line.SetC_Project_ID(toProject.GetC_Project_ID()); line.SetInvoicedAmt(Env.ZERO); line.SetInvoicedQty(Env.ZERO); line.SetC_OrderPO_ID(0); line.SetC_Order_ID(0); line.SetProcessed(false); if (line.Save()) { count++; } else { pp = VLogger.RetrieveError(); if (pp != null) { msg.Append(pp.GetName()); //if GetName is Empty then it will check GetValue if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg("", pp.GetValue())); } } if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved")); } else { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved") + "," + msg.ToString()); } } } } #endregion if (toProject.GetProjectLineLevel().Equals(PROJECTLINELEVEL_Phase) || toProject.GetProjectLineLevel().Equals(PROJECTLINELEVEL_Task) || toProject.GetProjectLineLevel().Equals(PROJECTLINELEVEL_TaskLine)) { #region if project line level is Project then create lines for phase only MProjectPhase[] myPhases = GetPhases(); MProjectPhase[] fromPhases = fromProject.GetPhases(); int C_Phase_ID = 0; bool exists = false; MProjectPhase toPhase = null; MProjectLine[] fromLines = null; List <MProjectLine> list = null; // Copy Phases for (int i = 0; i < fromPhases.Length; i++) { // Check if Phase already exists C_Phase_ID = fromPhases[i].GetC_Phase_ID(); exists = false; if (C_Phase_ID == 0) { exists = false; } else { for (int ii = 0; ii < myPhases.Length; ii++) { if (myPhases[ii].GetC_Phase_ID() == C_Phase_ID) { exists = true; break; } } } // Phase exist if (exists) { log.Info("Phase already exists here, ignored - " + fromPhases[i]); } else { toPhase = new MProjectPhase(GetCtx(), 0, Get_TrxName()); PO.CopyValues(fromPhases[i], toPhase, GetAD_Client_ID(), GetAD_Org_ID()); toPhase.SetC_Project_ID(toProject.GetC_Project_ID()); toPhase.SetC_Order_ID(0); toPhase.SetIsComplete(false); if (toPhase.Save()) { count++; if (toProject.GetProjectLineLevel().Equals(PROJECTLINELEVEL_Task) || toProject.GetProjectLineLevel().Equals(PROJECTLINELEVEL_TaskLine)) { toPhase.CopyTasksFrom(fromPhases[i], toPhase); } else { DataSet projDs = DB.ExecuteDataset(" SELECT C_ProjectLine_ID FROM C_ProjectLine WHERE " + " C_ProjectPhase_ID=" + fromPhases[i].GetC_ProjectPhase_ID() + " AND " + " C_Project_ID = " + fromPhases[i].GetC_Project_ID() + " ORDER BY Line "); if (projDs != null && projDs.Tables[0].Rows.Count > 0) { list = new List <MProjectLine>(); for (int k = 0; k < projDs.Tables[0].Rows.Count; k++) { list.Add(new MProjectLine(GetCtx(), Util.GetValueOfInt(projDs.Tables[0].Rows[k]["C_ProjectLine_ID"]), Get_TrxName())); } fromLines = new MProjectLine[list.Count]; fromLines = list.ToArray(); } if (fromLines != null && fromLines.Length > 0) { MProjectLine line = null; for (int j = 0; j < fromLines.Length; j++) { line = new MProjectLine(GetCtx(), 0, fromProject.Get_TrxName()); PO.CopyValues(fromLines[j], line, GetAD_Client_ID(), GetAD_Org_ID()); line.SetC_Project_ID(toProject.GetC_Project_ID()); line.SetC_ProjectPhase_ID(toPhase.GetC_ProjectPhase_ID()); line.SetInvoicedAmt(Env.ZERO); line.SetInvoicedQty(Env.ZERO); line.SetC_OrderPO_ID(0); line.SetC_Order_ID(0); line.SetProcessed(false); if (line.Save()) { count++; } else { pp = VLogger.RetrieveError(); if (pp != null) { msg.Append(pp.GetName()); //if GetName is Empty then it will check GetValue if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg("", pp.GetValue())); } } if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved")); } else { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved") + "," + msg.ToString()); } } } } } } else { pp = VLogger.RetrieveError(); if (pp != null) { msg.Append(pp.GetName()); //if GetName is Empty then it will check GetValue if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg("", pp.GetValue())); } } if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved")); } else { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved") + "," + msg.ToString()); } } } } #endregion } // count = CopyLinesFrom(fromProject) //+ CopyPhasesFrom(fromProject); return(count); }
/// <summary> /// Parent Constructor /// </summary> /// <param name="phase">parent</param> public MProjectTask(MProjectPhase phase) : this(phase.GetCtx(), 0, phase.Get_TrxName()) { SetClientOrg(phase); SetC_ProjectPhase_ID(phase.GetC_ProjectPhase_ID()); }
/// <summary> /// Update Header /// </summary> private void UpdateHeader() { int id = GetC_ProjectTask_ID(); int projID = 0; if (id == 0) { projID = GetC_Project_ID(); // Marketing Campaign Window } else { string Sql = "SELECT C_Project_ID FROM C_ProjectPhase WHERE C_ProjectPhase_ID in(select C_ProjectPhase_ID FROM" + " C_ProjectTask WHERE C_ProjectTask_ID =" + id + ")"; projID = Util.GetValueOfInt(DB.ExecuteScalar(Sql, null, null)); } string sql = "SELECT IsOpportunity FROM C_Project WHERE C_Project_ID = " + projID; string isOpp = Util.GetValueOfString(DB.ExecuteScalar(sql, null, null)); //Amit string isCam = Util.GetValueOfString(DB.ExecuteScalar("SELECT IsCampaign FROM C_Project WHERE C_Project_ID = " + projID)); if (isOpp.Equals("N") && isCam.Equals("N") && id != 0) { // set sum of planned Amount from task line to task MProjectTask tsk = new MProjectTask(GetCtx(), id, Get_Trx()); decimal plannedAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectTask_ID = " + id)); tsk.SetPlannedAmt(plannedAmt); tsk.Save(); } //Amit else if (isOpp.Equals("N") && isCam.Equals("N") && id == 0 && GetC_ProjectPhase_ID() != 0) { MProjectPhase projectPhase = new MProjectPhase(GetCtx(), GetC_ProjectPhase_ID(), null); decimal plnAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectPhase_ID = " + GetC_ProjectPhase_ID() + " AND pl.C_Project_ID = " + projID)); projectPhase.SetPlannedAmt(plnAmt); projectPhase.Save(); } else if (isOpp.Equals("Y")) // Opportunity Window { MProject prj = new MProject(GetCtx(), projID, Get_TrxName()); decimal plnAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + projID)); prj.SetPlannedAmt(plnAmt); prj.Save(); } else if (id != 0) { MProjectTask tsk = new MProjectTask(GetCtx(), id, Get_TrxName()); decimal plannedAmt = Util.GetValueOfDecimal(DB.ExecuteScalar("SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_ProjectTask_ID = " + id)); tsk.SetPlannedAmt(plannedAmt); tsk.Save(); } else { sql = "UPDATE C_Project p SET " + "PlannedAmt=(SELECT COALESCE(SUM(pl.PlannedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",PlannedQty=(SELECT COALESCE(SUM(pl.PlannedQty),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",PlannedMarginAmt=(SELECT COALESCE(SUM(pl.PlannedMarginAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",CommittedAmt=(SELECT COALESCE(SUM(pl.CommittedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",CommittedQty=(SELECT COALESCE(SUM(pl.CommittedQty),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ",InvoicedAmt=(SELECT COALESCE(SUM(pl.InvoicedAmt),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + ", InvoicedQty =(SELECT COALESCE(SUM(pl.InvoicedQty),0) FROM C_ProjectLine pl WHERE pl.IsActive = 'Y' AND pl.C_Project_ID = " + GetC_Project_ID() + ")" + " WHERE p.C_Project_ID=" + GetC_Project_ID(); int no = DB.ExecuteQuery(sql, null, Get_TrxName()); if (no != 1) { log.Log(Level.SEVERE, "updateHeader - #" + no); } } }
/// <summary> /// Before Save /// </summary> /// <param name="newRecord">new</param> /// <returns>true</returns> protected override bool BeforeSave(bool newRecord) { if (GetLine() == 0) { SetLine(); } // Planned Amount - Currency Precision Decimal plannedAmt = Decimal.Multiply(GetPlannedQty(), GetPlannedPrice()); if (Env.Scale(plannedAmt) > GetCurPrecision()) { //plannedAmt.setScale(GetCurPrecision(), Decimal.ROUND_HALF_UP); Decimal.Round(plannedAmt, GetCurPrecision(), MidpointRounding.AwayFromZero); } SetPlannedAmt(plannedAmt); // Planned Margin if (Is_ValueChanged("M_Product_ID") || Is_ValueChanged("M_Product_Category_ID") || Is_ValueChanged("PlannedQty") || Is_ValueChanged("PlannedPrice")) { if (GetM_Product_ID() != 0) { Decimal marginEach = Decimal.Subtract(GetPlannedPrice(), GetLimitPrice()); SetPlannedMarginAmt(Decimal.Multiply(marginEach, GetPlannedQty())); } else if (GetM_Product_Category_ID() != 0) { MProductCategory category = MProductCategory.Get(GetCtx(), GetM_Product_Category_ID()); Decimal marginEach = category.GetPlannedMargin(); SetPlannedMarginAmt(Decimal.Multiply(marginEach, GetPlannedQty())); } } // Phase/Task if (Is_ValueChanged("C_ProjectTask_ID") && GetC_ProjectTask_ID() != 0) { MProjectTask pt = new MProjectTask(GetCtx(), GetC_ProjectTask_ID(), Get_TrxName()); if (pt == null || pt.Get_ID() == 0) { log.Warning("Project Task Not Found - ID=" + GetC_ProjectTask_ID()); return(false); } else { SetC_ProjectPhase_ID(pt.GetC_ProjectPhase_ID()); } } if (Is_ValueChanged("C_ProjectPhase_ID") && GetC_ProjectPhase_ID() != 0) { MProjectPhase pp = new MProjectPhase(GetCtx(), GetC_ProjectPhase_ID(), Get_TrxName()); if (pp == null || pp.Get_ID() == 0) { log.Warning("Project Phase Not Found - " + GetC_ProjectPhase_ID()); return(false); } else { SetC_Project_ID(pp.GetC_Project_ID()); } } return(true); }
/// <summary> /// To copy task from other phase to new phase /// </summary> /// <param name="fromPhase">From Phase</param> /// <param name="toPhase">To Phase</param> /// <returns></returns> public int CopyTasksFrom(MProjectPhase fromPhase, MProjectPhase toPhase) { if (fromPhase == null) { return(0); } int count = 0; ValueNamePair pp = null; StringBuilder msg = new StringBuilder(); MProjectTask[] myTasks = GetTasks(); MProjectTask[] fromTasks = fromPhase.GetTasks(); int C_Task_ID = 0; bool exists = false; // Copy Project Tasks for (int i = 0; i < fromTasks.Length; i++) { // Check if Task already exists C_Task_ID = fromTasks[i].GetC_ProjectTask_ID(); exists = false; if (C_Task_ID == 0) { exists = false; } else { for (int ii = 0; ii < myTasks.Length; ii++) { if (myTasks[ii].GetC_ProjectTask_ID() == C_Task_ID) { exists = true; break; } } } // Phase exist if (exists) { log.Info("Task already exists here, ignored - " + fromTasks[i]); } else { MProjectTask toTask = new MProjectTask(GetCtx(), 0, Get_TrxName()); PO.CopyValues(fromTasks[i], toTask, GetAD_Client_ID(), GetAD_Org_ID()); toTask.SetC_ProjectPhase_ID(toPhase.GetC_ProjectPhase_ID()); if (toTask.Save()) { count++; count += CopyMTaskLinesFromProjectTask(fromTasks[i], toTask, toPhase.GetC_Project_ID()); } else { pp = VLogger.RetrieveError(); if (pp != null) { msg.Append(pp.GetName()); //if GetName is Empty then it will check GetValue if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg("", pp.GetValue())); } } if (string.IsNullOrEmpty(msg.ToString())) { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved")); } else { msg.Append(Msg.GetMsg(GetCtx(), "VIS_LineNotSaved") + "," + msg.ToString()); } } } } if (fromTasks.Length != count) { log.Warning("Count difference - ProjectPhase=" + fromTasks.Length + " <> Saved=" + count); } return(count); }