protected void SubmitButton_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }
            var accessPermissions = XrmContext.GetOpportunityAccessByContact(Contact);

            var canSave = false;

            foreach (var adxOpportunitypermissionse in accessPermissions)
            {
                if (adxOpportunitypermissionse.GetAttributeValue <bool?>("adx_write").GetValueOrDefault(false))
                {
                    canSave = true;
                }
            }

            if (!canSave)
            {
                return;
            }

            ContactFormView.UpdateItem();

            OpportunityFormView.UpdateItem();
        }
        private void DisableControlsBasedOnPipelinePhaseAndAccessPermissions()
        {
            var accessPermissions = XrmContext.GetOpportunityAccessByContact(Contact);

            //CreateCaseLink.Visible = false;
            AssignToList.Visible = false;
            //AssignToContact.Visible = false;
            OpportunityStatusPanel.Visible = false;
            SubmitButton.Visible           = false;
            CancelOpportunity.Visible      = false;

            foreach (var access in accessPermissions)
            {
                if (access.GetAttributeValue <bool?>("adx_write").GetValueOrDefault(false))
                {
                    //CreateCaseLink.Visible = true;
                    SubmitButton.Visible           = true;
                    OpportunityStatusPanel.Visible = true;
                }

                if (access.GetAttributeValue <bool?>("adx_assign").GetValueOrDefault(false))
                {
                    AssignToList.Visible = true;
                    //AssignToContact.Visible = true;
                }

                if (access.GetAttributeValue <bool?>("adx_delete").GetValueOrDefault(false))
                {
                    CancelOpportunity.Visible = true;
                }
            }

            CurrentlyAssignedToLabel.Visible = !AssignToList.Visible;

            if (OpenOpportunity.GetAttributeValue <OptionSetValue>("statecode") != null && (OpenOpportunity.GetAttributeValue <OptionSetValue>("statecode").Value == (int)Adxstudio.Xrm.Partner.Enums.OpportunityState.Lost || OpenOpportunity.GetAttributeValue <OptionSetValue>("statecode").Value == (int)Adxstudio.Xrm.Partner.Enums.OpportunityState.Won))
            {
                CrmEntityFormViewsPanel.Enabled = false;
                OpportunityStatusPanel.Enabled  = false;
            }
        }
예제 #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            RedirectToLoginIfAnonymous();

            if (ContactToEdit == null)
            {
                RecordNotFoundError.Visible = true;

                ManagePermissions.Visible = false;

                return;
            }

            var parentAccount            = Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? null : XrmContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id);
            var accountAccessPermissions = parentAccount == null ? new List <Entity>() : ServiceContext.GetAccountAccessByContact(Contact).ToList();
            var accountAccessPermissionsForParentAccount = parentAccount == null ? new List <Entity>() : accountAccessPermissions.Where(a => a.GetAttributeValue <EntityReference>("adx_accountid") != null && a.GetAttributeValue <EntityReference>("adx_accountid").Equals(parentAccount.ToEntityReference())).ToList();
            var contactAccessPermissions = parentAccount == null ? new List <Entity>() : XrmContext.GetContactAccessByContact(Contact).ToList();
            var contactAccessPermissionsForParentAccount = parentAccount == null ? new List <Entity>() : contactAccessPermissions.Where(c => c.GetAttributeValue <EntityReference>("adx_accountid") != null && c.GetAttributeValue <EntityReference>("adx_accountid").Equals(parentAccount.ToEntityReference()) && c.GetAttributeValue <OptionSetValue>("adx_scope").Value == (int)Enums.ContactAccessScope.Account).ToList();
            var channelPermissions     = XrmContext.GetChannelAccessByContact(Contact);
            var opportunityPermissions = XrmContext.GetOpportunityAccessByContact(Contact).FirstOrDefault();
            var contactToEditOpportunityPermissions = XrmContext.CreateQuery("adx_opportunitypermissions").FirstOrDefault(c => c.GetAttributeValue <EntityReference>("adx_contactid") != null && c.GetAttributeValue <EntityReference>("adx_contactid").Equals(ContactToEdit.ToEntityReference()));
            var contactToEditChannelPermissions     = XrmContext.CreateQuery("adx_channelpermissions").FirstOrDefault(c => c.GetAttributeValue <EntityReference>("adx_contactid") != null && c.GetAttributeValue <EntityReference>("adx_contactid").Equals(ContactToEdit.ToEntityReference()));
            var canEditContacts               = false;
            var canManagePermissions          = false;
            var canEditChannelPermissions     = channelPermissions != null;
            var canEditOpportunityPermissions = opportunityPermissions != null;

            if (parentAccount == null)
            {
                ManagePermissions.Visible = false;

                NoParentAccountError.Visible = true;

                return;
            }

            if (!accountAccessPermissions.Any())
            {
                ManagePermissions.Visible = false;

                NoAccountAccessPermissionsRecordError.Visible = true;

                return;
            }

            if (!accountAccessPermissionsForParentAccount.Any())
            {
                ManagePermissions.Visible = false;

                NoAccountAccessPermissionsForParentAccountError.Visible = true;

                return;
            }

            if (!contactAccessPermissions.Any())
            {
                ManagePermissions.Visible = false;

                NoContactAccessPermissionsRecordError.Visible = true;

                return;
            }

            if (!contactAccessPermissionsForParentAccount.Any())
            {
                ManagePermissions.Visible = false;

                NoContactAccessPermissionsForParentAccountError.Visible = true;

                return;
            }

            foreach (var access in accountAccessPermissionsForParentAccount)
            {
                if (access.GetAttributeValue <bool?>("adx_managepermissions").GetValueOrDefault(false))
                {
                    canManagePermissions = true;
                }
            }

            if (!canManagePermissions)
            {
                ManagePermissions.Visible = false;

                AccountAccessManagePermissionsDeniedError.Visible = true;

                return;
            }

            foreach (var access in contactAccessPermissionsForParentAccount)
            {
                if (access.GetAttributeValue <bool?>("adx_write").GetValueOrDefault(false))
                {
                    canEditContacts = true;
                }
            }

            if (!canEditContacts)
            {
                ManagePermissions.Visible = false;

                ContactAccessPermissionsError.Visible = true;

                return;
            }

            if (channelPermissions == null && opportunityPermissions == null)
            {
                ManagePermissions.Visible = false;

                NoPermissionsError.Visible = true;

                return;
            }

            if (contactToEditOpportunityPermissions == null & contactToEditChannelPermissions == null)
            {
                ManagePermissions.Visible = false;

                PermissionsRecordsForContactEditNotFoundError.Visible = true;

                return;
            }

            if (!canEditOpportunityPermissions)
            {
                OpportunityPermissions.Visible = false;

                NoOpportunityPermissionsRecordWarning.Visible = true;
            }
            else
            {
                if (contactToEditOpportunityPermissions == null)
                {
                    OpportunityPermissions.Visible = false;

                    OpportunityPermissionsRecordForContactEditNotFoundError.Visible = true;
                }
                else
                {
                    var opportunityPermissionsFormViewDataSource = new CrmDataSource {
                        ID = "OpportunityPermissionsFormViewDataSource", CrmDataContextName = OpportunityPermissionsFormView.ContextName
                    };

                    var opportunityPermissionsFetchXml =
                        string.Format(
                            "<fetch mapping='logical'><entity name='{0}'><all-attributes /><filter type='and'><condition attribute = '{1}' operator='eq' value='{{{2}}}'/></filter></entity></fetch>",
                            "adx_opportunitypermissions", "adx_opportunitypermissionsid", contactToEditOpportunityPermissions.Id);

                    opportunityPermissionsFormViewDataSource.FetchXml = opportunityPermissionsFetchXml;

                    OpportunityPermissions.Controls.Add(opportunityPermissionsFormViewDataSource);

                    OpportunityPermissionsFormView.DataSourceID = "OpportunityPermissionsFormViewDataSource";
                }
            }

            if (!canEditChannelPermissions)
            {
                ChannelPermissions.Visible = false;

                NoChannelPermissionsRecordWarning.Visible = true;
            }
            else
            {
                if (contactToEditChannelPermissions == null)
                {
                    ChannelPermissions.Visible = false;

                    ChannelPermissionsRecordForContactEditNotFoundError.Visible = true;
                }
                else
                {
                    var channelPermissionsFormViewDataSource = new CrmDataSource {
                        ID = "ChannelPermissionsWebViewDataSource", CrmDataContextName = ChannelPermissionsFormView.ContextName
                    };

                    var channelPermissionsFetchXml =
                        string.Format(
                            "<fetch mapping='logical'><entity name='{0}'><all-attributes /><filter type='and'><condition attribute = '{1}' operator='eq' value='{{{2}}}'/></filter></entity></fetch>",
                            "adx_channelpermissions", "adx_channelpermissionsid", contactToEditChannelPermissions.Id);

                    channelPermissionsFormViewDataSource.FetchXml = channelPermissionsFetchXml;

                    ChannelPermissions.Controls.Add(channelPermissionsFormViewDataSource);

                    ChannelPermissionsFormView.DataSourceID = "ChannelPermissionsWebViewDataSource";
                }
            }

            if (!IsPostBack)
            {
                SetControlValues(contactToEditOpportunityPermissions, contactToEditChannelPermissions);
            }

            EnableControlsBasedOnPartnerAccess(opportunityPermissions, channelPermissions);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            RedirectToLoginIfAnonymous();

            if (Page.IsPostBack)
            {
                return;
            }

            var opportunityPermissions = XrmContext.GetOpportunityAccessByContact(Contact).ToList();

            if (!opportunityPermissions.Any())
            {
                NoOpportunityPermissionsRecordError.Visible = true;

                OpportunityDetailsPanel.Visible = false;

                return;
            }

            bool createAccess = false;

            foreach (var access in opportunityPermissions)
            {
                var opportunityCreateAccess = (access != null && access.GetAttributeValue <bool?>("adx_create").GetValueOrDefault(false));

                if (opportunityCreateAccess)
                {
                    createAccess = true;
                }
            }

            if (!createAccess)
            {
                OpportunityPermissionsError.Visible = true;

                OpportunityDetailsPanel.Visible = false;

                return;
            }

            var channelPermission               = ServiceContext.GetChannelAccessByContact(Contact);
            var channelCreateAccess             = (channelPermission != null && channelPermission.GetAttributeValue <bool?>("adx_create").GetValueOrDefault(false));
            var parentCustomerAccount           = Contact.GetAttributeValue <EntityReference>("parentcustomerid") == null ? null : ServiceContext.CreateQuery("account").FirstOrDefault(a => a.GetAttributeValue <Guid>("accountid") == Contact.GetAttributeValue <EntityReference>("parentcustomerid").Id);
            var validAcccountClassificationCode = parentCustomerAccount != null && parentCustomerAccount.GetAttributeValue <OptionSetValue>("accountclassificationcode") != null && parentCustomerAccount.GetAttributeValue <OptionSetValue>("accountclassificationcode").Value == (int)CustomerManagement.Enums.AccountClassificationCode.Partner;

            if (channelPermission == null)
            {
                NoChannelPermissionsRecordError.Visible = true;

                CreateCustomerButton.Visible = false;
            }
            else
            {
                if (!channelCreateAccess)
                {
                    ChannelPermissionsError.Visible = true;
                }
                else
                {
                    if (parentCustomerAccount == null)
                    {
                        NoParentAccountError.Visible = true;
                    }
                    else
                    {
                        ParentAccountClassificationCodeError.Visible = !validAcccountClassificationCode;
                    }
                }

                if ((!channelCreateAccess) || parentCustomerAccount == null || !validAcccountClassificationCode)
                {
                    CreateCustomerButton.Visible = false;
                }
            }

            var partnerAccounts = ServiceContext.CreateQuery("account").Where(a => a.GetAttributeValue <EntityReference>("msa_managingpartnerid") != null && a.GetAttributeValue <EntityReference>("msa_managingpartnerid").Equals(parentCustomerAccount.ToEntityReference())).ToList();

            var accounts = partnerAccounts
                           .Where(a => a.GetAttributeValue <EntityReference>("primarycontactid") != null)
                           .OrderBy(a => a.GetAttributeValue <string>("name"))
                           .Select(a => new ListItem(a.GetAttributeValue <string>("name"), a.GetAttributeValue <Guid>("accountid").ToString())).ToList();

            if (!accounts.Any())
            {
                Account_dropdown.Enabled = false;

                if (!partnerAccounts.Any())
                {
                    NoManagingPartnerCustomerAccountsMessage.Visible = true;
                }
                else
                {
                    NoPrimaryContactOnManagingPartnerCustomerAccountsMessage.Visible = true;

                    ManageCustomersButton.Visible = true;
                }
            }
            else
            {
                NoManagingPartnerCustomerAccountsMessage.Visible = false;

                NoPrimaryContactOnManagingPartnerCustomerAccountsMessage.Visible = false;

                Account_dropdown.DataSource = accounts;

                Account_dropdown.DataTextField = "Text";

                Account_dropdown.DataValueField = "Value";

                Account_dropdown.DataBind();

                if (ParentCustomerAccount != null)
                {
                    Account_dropdown.ClearSelection();

                    foreach (ListItem li in Account_dropdown.Items)
                    {
                        Guid id;

                        if (Guid.TryParse(li.Value, out id) && id == ParentCustomerAccount.GetAttributeValue <Guid>("accountid"))
                        {
                            li.Selected = true;
                        }
                    }
                }
            }
        }