///<summary>
        /// Method Invocation of wrapper classes
        ///<summary>
        protected static FR_L6DD_RGD_1503 Invoke(DbConnection Connection, DbTransaction Transaction, string ConnectionString, P_L6DD_RGD_1503 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            bool cleanupConnection  = Connection == null;
            bool cleanupTransaction = Transaction == null;

            FR_L6DD_RGD_1503 functionReturn = new FR_L6DD_RGD_1503();

            try
            {
                if (cleanupConnection == true)
                {
                    Connection = CSV2Core_MySQL.Support.DBSQLSupport.CreateConnection(ConnectionString);
                    Connection.Open();
                }
                if (cleanupTransaction == true)
                {
                    Transaction = Connection.BeginTransaction();
                }

                functionReturn = Execute(Connection, Transaction, Parameter, securityTicket);

                #region Cleanup Connection/Transaction
                //Commit the transaction
                if (cleanupTransaction == true)
                {
                    Transaction.Commit();
                }
                //Close the connection
                if (cleanupConnection == true)
                {
                    Connection.Close();
                }
                #endregion
            }
            catch (Exception ex)
            {
                try
                {
                    if (cleanupTransaction == true && Transaction != null)
                    {
                        Transaction.Rollback();
                    }
                }
                catch { }

                try
                {
                    if (cleanupConnection == true && Connection != null)
                    {
                        Connection.Close();
                    }
                }
                catch { }

                throw new Exception("Exception occured in method cls_Get_RevisionGroupDetails", ex);
            }
            return(functionReturn);
        }
        protected static FR_L6DD_RGD_1503 Execute(DbConnection Connection, DbTransaction Transaction, P_L6DD_RGD_1503 Parameter, CSV2Core.SessionSecurity.SessionSecurityTicket securityTicket = null)
        {
            #region UserCode
            var returnValue = new FR_L6DD_RGD_1503();
            //Put your code here
            returnValue.Result = new L6DD_RGD_1503();

            var ormRevisionGroups = ORM_RES_DUD_RevisionGroup.Query.Search(Connection, Transaction, new ORM_RES_DUD_RevisionGroup.Query()
            {
                RES_DUD_Revision_GroupID = Parameter.RevisionGroupID,
                Tenant_RefID             = securityTicket.TenantID,
                IsDeleted = false
            });
            if (ormRevisionGroups.Count == 0)
            {
                return(null);
            }
            var revisionGroup = ormRevisionGroups[0];

            var docHeaderIDs = new List <Guid>();
            var priceIDs     = new List <Guid>();
            returnValue.Result.Currency           = "EUR"; //HARDCODED
            returnValue.Result.Name               = revisionGroup.RevisionGroup_Name;
            returnValue.Result.Comment            = revisionGroup.RevisionGroup_Comment;
            returnValue.Result.SubmittedByAccount = revisionGroup.RevisionGroup_SubmittedBy_Account_RefID;
            returnValue.Result.CreationTimestamp  = revisionGroup.Creation_Timestamp;
            returnValue.Result.RevisionGroupID    = revisionGroup.RES_DUD_Revision_GroupID;

            ORM_RES_RealestateProperty ormRealestateProperty = new ORM_RES_RealestateProperty();
            ormRealestateProperty.Load(Connection, Transaction, revisionGroup.RealestateProperty_RefID);
            ORM_CMN_LOC_Location ormLocation = new ORM_CMN_LOC_Location();
            ormLocation.Load(Connection, Transaction, ormRealestateProperty.RealestateProperty_Location_RefID);
            ORM_CMN_Address ormAddress = new ORM_CMN_Address();
            ormAddress.Load(Connection, Transaction, ormLocation.Address_RefID);

            returnValue.Result.Street_Name     = ormAddress.Street_Name;
            returnValue.Result.Street_Number   = ormAddress.Street_Number;
            returnValue.Result.Country_Name    = ormAddress.Country_Name;
            returnValue.Result.City_Name       = ormAddress.City_Name;
            returnValue.Result.City_PostalCode = ormAddress.City_PostalCode;
            returnValue.Result.City_Region     = ormAddress.City_Region;

            var accountInformation = cls_Get_Account_PersonalInformation_for_AccountID.Invoke(Connection, Transaction, new P_L2AI_GAPIfAI_1627()
            {
                AccountRefID = revisionGroup.RevisionGroup_SubmittedBy_Account_RefID
            }, securityTicket).Result;
            returnValue.Result.SubmittedByAccount_LastName  = accountInformation.LastName;
            returnValue.Result.SubmittedByAccount_FirstName = accountInformation.FirstName;

            var revisions = ORM_RES_DUD_Revision.Query.Search(Connection, Transaction, new ORM_RES_DUD_Revision.Query()
            {
                RevisionGroup_RefID = revisionGroup.RES_DUD_Revision_GroupID,
                IsDeleted           = false,
                Tenant_RefID        = securityTicket.TenantID
            });

            if (revisions == null)
            {
                return(null);
            }

            var populatedRevisions = new List <Revisions>();
            #region retrieve revision full details
            foreach (var revision in revisions)
            {
                Revisions populatedRevision = new Revisions();
                populatedRevision.RevisionID             = revision.RES_DUD_RevisionID;
                populatedRevision.QuestionnaireVersionID = revision.QuestionnaireVersion_RefID;
                populatedRevision.Comment           = revision.Revision_Comment;
                populatedRevision.Title             = revision.Revision_Title;
                populatedRevision.CreationTimestamp = revision.Creation_Timestamp;

                //For each revision in revision group gather and assemble info

                #region submision information
                populatedRevision.ApartmentSubmissionInfo = cls_Get_ApartmentSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GASIfRID_1007()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.ApartmentSubmissionInfo != null)
                {
                    var assessments = populatedRevision.ApartmentSubmissionInfo.SelectMany(a => a.ApartmentPropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.ApartmentReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.AtticSubmissionInfo = cls_Get_AtticSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GATTSIFRID_1411()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.AtticSubmissionInfo != null)
                {
                    var assessments = populatedRevision.AtticSubmissionInfo.SelectMany(a => a.AtticPropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.AtticReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.BasementSubmissionInfo = cls_Get_BasementSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GBSIfRID_1431()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.BasementSubmissionInfo != null)
                {
                    var assessments = populatedRevision.BasementSubmissionInfo.SelectMany(a => a.BasementPropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.BasementReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.FacadeSubmissionInfo = cls_Get_FacadeSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GFSIfRID_1438()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.FacadeSubmissionInfo != null)
                {
                    var assessments = populatedRevision.FacadeSubmissionInfo.SelectMany(a => a.FacadePropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.FacadeReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.HVACRSubmissionInfo = cls_Get_HVACRSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GHSIfRID_1448()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.HVACRSubmissionInfo != null)
                {
                    var assessments = populatedRevision.HVACRSubmissionInfo.SelectMany(a => a.HVACRPropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.HVACRReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.OutdoorFascilitySubmissionInfo = cls_Get_OutdoorFascilitySubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GOFSIfRID_1454()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.OutdoorFascilitySubmissionInfo != null)
                {
                    var assessments = populatedRevision.OutdoorFascilitySubmissionInfo.SelectMany(a => a.OutdoorFacilityAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.OutdoorFacilityReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.RoofSubmissionInfo = cls_Get_RoofSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GRSIfRID_1213()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.RoofSubmissionInfo != null)
                {
                    var assessments = populatedRevision.RoofSubmissionInfo.SelectMany(a => a.RoofPropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.RoofReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                populatedRevision.StaircaseSubmissionInfo = cls_Get_StaircaseSubmisionInfo_For_RevisionID.Invoke(Connection, Transaction, new P_L5DD_GASIfRID_1507()
                {
                    RevisionID = revision.RES_DUD_RevisionID
                }, securityTicket).Result;
                if (populatedRevision.StaircaseSubmissionInfo != null)
                {
                    var assessments = populatedRevision.StaircaseSubmissionInfo.SelectMany(a => a.StaircasePropertyAsessments);
                    if (assessments != null)
                    {
                        var         reqActions           = assessments.SelectMany(ass => ass.StaircaseReqActions);
                        List <Guid> pricePerUnitRefIDs   = reqActions.Where(r => r.Action_PricePerUnit_RefID != Guid.Empty).Select(r => r.Action_PricePerUnit_RefID).ToList();
                        List <Guid> effectivePriceRefIDs = reqActions.Where(r => r.EffectivePrice_RefID != Guid.Empty).Select(r => r.EffectivePrice_RefID).ToList();
                        priceIDs.AddRange(pricePerUnitRefIDs);
                        priceIDs.AddRange(effectivePriceRefIDs);
                    }
                }

                #endregion

                #region building information

                populatedRevision.Building = cls_Get_BuildingInfo_for_Building_ID.Invoke(Connection, Transaction, new P_L5BL_GBIfBI_1159()
                {
                    BuildingID = revision.RES_BLD_Building_RefID
                }, securityTicket).Result;

                populatedRevisions.Add(populatedRevision);
                #endregion
            }
            #endregion
            returnValue.Result.Revisions = populatedRevisions.ToArray();


            #region Retrieve Images (documents)

            //retrieve image and price ID's
            foreach (var revision in returnValue.Result.Revisions)
            {
                docHeaderIDs.AddRange(revision.ApartmentSubmissionInfo.Select(x => x.Apartment_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.ApartmentSubmissionInfo.SelectMany(x => x.ApartmentPropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.AtticSubmissionInfo.Select(x => x.Attic_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.AtticSubmissionInfo.SelectMany(x => x.AtticPropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.BasementSubmissionInfo.Select(x => x.Basement_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.BasementSubmissionInfo.SelectMany(x => x.BasementPropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.FacadeSubmissionInfo.Select(x => x.Facade_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.FacadeSubmissionInfo.SelectMany(x => x.FacadePropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.HVACRSubmissionInfo.Select(x => x.HVACR_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.HVACRSubmissionInfo.SelectMany(x => x.HVACRPropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.OutdoorFascilitySubmissionInfo.Select(x => x.OutdoorF_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.OutdoorFascilitySubmissionInfo.SelectMany(x => x.OutdoorFacilityAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.RoofSubmissionInfo.Select(x => x.Roof_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.RoofSubmissionInfo.SelectMany(x => x.RoofPropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.AddRange(revision.StaircaseSubmissionInfo.Select(x => x.Staircase_DocumentHeader_RefID));
                docHeaderIDs.AddRange(revision.StaircaseSubmissionInfo.SelectMany(x => x.StaircasePropertyAsessments.Select(s => s.DocumentHeader_RefID)));

                docHeaderIDs.Add(revision.Building.Building_DocumentationStructure_RefID);


                priceIDs.AddRange(revision.ApartmentSubmissionInfo.SelectMany(x => x.ApartmentPropertyAsessments.SelectMany(s => s.ApartmentReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.AtticSubmissionInfo.SelectMany(x => x.AtticPropertyAsessments.SelectMany(s => s.AtticReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.BasementSubmissionInfo.SelectMany(x => x.BasementPropertyAsessments.SelectMany(s => s.BasementReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.FacadeSubmissionInfo.SelectMany(x => x.FacadePropertyAsessments.SelectMany(s => s.FacadeReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.HVACRSubmissionInfo.SelectMany(x => x.HVACRPropertyAsessments.SelectMany(s => s.HVACRReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.OutdoorFascilitySubmissionInfo.SelectMany(x => x.OutdoorFacilityAsessments.SelectMany(s => s.OutdoorFacilityReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.RoofSubmissionInfo.SelectMany(x => x.RoofPropertyAsessments.SelectMany(s => s.RoofReqActions.Select(z => z.Action_PricePerUnit_RefID))));
                priceIDs.AddRange(revision.StaircaseSubmissionInfo.SelectMany(x => x.StaircasePropertyAsessments.SelectMany(s => s.StaircaseReqActions.Select(z => z.Action_PricePerUnit_RefID))));

                priceIDs.AddRange(revision.ApartmentSubmissionInfo.SelectMany(x => x.ApartmentPropertyAsessments.SelectMany(s => s.ApartmentReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.AtticSubmissionInfo.SelectMany(x => x.AtticPropertyAsessments.SelectMany(s => s.AtticReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.BasementSubmissionInfo.SelectMany(x => x.BasementPropertyAsessments.SelectMany(s => s.BasementReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.FacadeSubmissionInfo.SelectMany(x => x.FacadePropertyAsessments.SelectMany(s => s.FacadeReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.HVACRSubmissionInfo.SelectMany(x => x.HVACRPropertyAsessments.SelectMany(s => s.HVACRReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.OutdoorFascilitySubmissionInfo.SelectMany(x => x.OutdoorFacilityAsessments.SelectMany(s => s.OutdoorFacilityReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.RoofSubmissionInfo.SelectMany(x => x.RoofPropertyAsessments.SelectMany(s => s.RoofReqActions.Select(z => z.EffectivePrice_RefID))));
                priceIDs.AddRange(revision.StaircaseSubmissionInfo.SelectMany(x => x.StaircasePropertyAsessments.SelectMany(s => s.StaircaseReqActions.Select(z => z.EffectivePrice_RefID))));


                //docHeaderIDs.Concat(revison.BuildingInfo.BuildingDocuments.Select(x => x.Building_DocumentationStructure_RefID));
            }


            var docHeaders = new List <L3DO_GDfDH_1133>();

            foreach (var docHeaderID in docHeaderIDs)
            {
                if (docHeaderID == Guid.Empty)
                {
                    continue;
                }
                var documentRevisions = cls_Get_Documents_for_DHeaderID.Invoke(Connection, Transaction, new P_L3DO_GDfDH_1133()
                {
                    DHeaderID = docHeaderID
                }, securityTicket).Result;
                if (documentRevisions == null || documentRevisions.Count() == 0)
                {
                    continue;
                }

                docHeaders.AddRange(documentRevisions);
            }
            returnValue.Result.Images = docHeaders.ToArray();
            #endregion

            #region Retrieve Prices
            var dbPrices = new List <L2PR_GPIfP_1135>();
            foreach (var priceID in priceIDs)
            {
                if (priceID == Guid.Empty)
                {
                    continue;
                }
                var priceValue = cls_Get_PriceInformation_For_PriceID.Invoke(Connection, Transaction, new P_L2PR_GPIfP_1135()
                {
                    PriceID = priceID
                }, securityTicket).Result;
                if (priceValue == null)
                {
                    continue;
                }
                dbPrices.Add(priceValue);
                //Find EU

                //if (string.Equals(priceValue.ISO4127, "EUR", StringComparison.OrdinalIgnoreCase))
                //    {
                //        dbPrices.Add(priceValue);
                //        break;
                //    }
                //    else
                //    {
                //        dbPrices.Add(priceValue);
                //        break;
                //    }
            }
            returnValue.Result.Prices = dbPrices.ToArray();

            #endregion

            return(returnValue);

            #endregion UserCode
        }