Search in sources :

Example 1 with AdWindowId

use of org.adempiere.ad.element.api.AdWindowId in project metasfresh-webui-api by metasfresh.

the class BoardDescriptorRepository method createBoardDescriptor.

private BoardDescriptor createBoardDescriptor(final int boardId) {
    // 
    // Retrieve the board PO
    final IQueryBL queryBL = Services.get(IQueryBL.class);
    final I_WEBUI_Board boardPO = queryBL.createQueryBuilderOutOfTrx(I_WEBUI_Board.class).addEqualsFilter(I_WEBUI_Board.COLUMN_WEBUI_Board_ID, boardId).addOnlyActiveRecordsFilter().create().firstOnly(I_WEBUI_Board.class);
    if (boardPO == null) {
        throw new EntityNotFoundException("No board found for ID=" + boardId);
    }
    // 
    // Board document mappings
    final String tableName = Services.get(IADTableDAO.class).retrieveTableName(boardPO.getAD_Table_ID());
    final String keyColumnName = InterfaceWrapperHelper.getKeyColumnName(tableName);
    // TODO: hardcoded
    final String userIdColumnName = "UpdatedBy";
    // 
    // Board document info
    // TODO boardPO.getAD_Window_ID();
    AdWindowId adWindowId = null;
    if (adWindowId == null) {
        adWindowId = RecordZoomWindowFinder.findAdWindowId(tableName).get();
    }
    final WindowId documentWindowId = WindowId.of(adWindowId);
    final DocumentEntityDescriptor documentEntityDescriptor = documentDescriptors.getDocumentEntityDescriptor(documentWindowId);
    final SqlDocumentEntityDataBindingDescriptor documentBinding = documentEntityDescriptor.getDataBinding(SqlDocumentEntityDataBindingDescriptor.class);
    final String tableAlias = documentBinding.getTableAlias();
    // 
    // Board document lookup provider
    final int adValRuleId = boardPO.getAD_Val_Rule_ID();
    final LookupDescriptorProvider documentLookupDescriptorProvider = SqlLookupDescriptor.builder().setCtxTableName(null).setCtxColumnName(keyColumnName).setDisplayType(DisplayType.Search).setWidgetType(DocumentFieldWidgetType.Lookup).setAD_Val_Rule_ID(adValRuleId).buildProvider();
    // 
    // Board descriptor
    final IModelTranslationMap boardTrlMap = InterfaceWrapperHelper.getModelTranslationMap(boardPO);
    final BoardDescriptorBuilder boardDescriptor = BoardDescriptor.builder().boardId(boardPO.getWEBUI_Board_ID()).caption(boardTrlMap.getColumnTrl(I_WEBUI_Board.COLUMNNAME_Name, boardPO.getName())).documentWindowId(documentWindowId).documentLookupDescriptorProvider(documentLookupDescriptorProvider).tableName(tableName).tableAlias(tableAlias).keyColumnName(keyColumnName).userIdColumnName(userIdColumnName).websocketEndpoint(WebSocketConfig.buildBoardTopicName(boardId));
    // Source document filters: AD_Val_Rule_ID
    if (adValRuleId > 0) {
        final IValidationRule validationRule = Services.get(IValidationRuleFactory.class).create(// ctx table name
        tableName, // ctx table name
        adValRuleId, // ctx table name
        null, // ctx column name
        null);
        final String sqlWhereClause = validationRule.getPrefilterWhereClause().evaluate(Evaluatees.ofCtx(Env.getCtx()), OnVariableNotFound.Fail);
        final DocumentFilter adValRuleFilter = DocumentFilter.builder().setFilterId("AD_Val_Rule_" + adValRuleId).addParameter(DocumentFilterParam.ofSqlWhereClause(true, sqlWhereClause)).build();
        boardDescriptor.documentFilters(DocumentFilterList.of(adValRuleFilter));
    }
    // 
    // Lanes
    {
        queryBL.createQueryBuilderOutOfTrx(I_WEBUI_Board_Lane.class).addEqualsFilter(I_WEBUI_Board_Lane.COLUMN_WEBUI_Board_ID, boardId).addOnlyActiveRecordsFilter().orderBy().addColumn(I_WEBUI_Board_Lane.COLUMN_SeqNo).addColumn(// just have a predictable order
        I_WEBUI_Board_Lane.COLUMN_WEBUI_Board_Lane_ID).endOrderBy().create().stream(I_WEBUI_Board_Lane.class).map(this::createBoardLaneDescriptor).forEach(lane -> boardDescriptor.lane(lane.getLaneId(), lane));
    }
    // 
    // Board card fields
    {
        queryBL.createQueryBuilderOutOfTrx(I_WEBUI_Board_CardField.class).addEqualsFilter(I_WEBUI_Board_CardField.COLUMN_WEBUI_Board_ID, boardId).addOnlyActiveRecordsFilter().orderBy().addColumn(I_WEBUI_Board_CardField.COLUMN_SeqNo).addColumn(I_WEBUI_Board_CardField.COLUMN_WEBUI_Board_CardField_ID).endOrderBy().create().stream(I_WEBUI_Board_CardField.class).map(cardFieldPO -> createBoardCardFieldDescriptor(cardFieldPO, documentEntityDescriptor)).forEach(cardField -> boardDescriptor.cardFieldByFieldName(cardField.getFieldName(), cardField));
    }
    // 
    return boardDescriptor.build();
}
Also used : DBUniqueConstraintException(org.adempiere.exceptions.DBUniqueConstraintException) I_WEBUI_Board_CardField(de.metas.ui.web.base.model.I_WEBUI_Board_CardField) JSONBoardChangedEventsList(de.metas.ui.web.board.json.events.JSONBoardChangedEventsList) ITrx(org.adempiere.ad.trx.api.ITrx) Env(org.compiere.util.Env) JSONBoardChangedEventsListBuilder(de.metas.ui.web.board.json.events.JSONBoardChangedEventsList.JSONBoardChangedEventsListBuilder) CurrencyCode(de.metas.currency.CurrencyCode) BigDecimal(java.math.BigDecimal) IStringExpression(org.adempiere.ad.expression.api.IStringExpression) InterfaceWrapperHelper(org.adempiere.model.InterfaceWrapperHelper) ResultSet(java.sql.ResultSet) DocumentFilterList(de.metas.ui.web.document.filter.DocumentFilterList) Map(java.util.Map) ToString(lombok.ToString) Repository(org.springframework.stereotype.Repository) RecordZoomWindowFinder(org.adempiere.model.RecordZoomWindowFinder) ImmutableSet(com.google.common.collect.ImmutableSet) WindowConstants(de.metas.ui.web.window.WindowConstants) ITranslatableString(de.metas.i18n.ITranslatableString) NonNull(lombok.NonNull) Collection(java.util.Collection) Set(java.util.Set) PreparedStatement(java.sql.PreparedStatement) I_WEBUI_Board_RecordAssignment(de.metas.ui.web.base.model.I_WEBUI_Board_RecordAssignment) EqualsAndHashCode(lombok.EqualsAndHashCode) ITrxManager(org.adempiere.ad.trx.api.ITrxManager) DocumentFieldDescriptor(de.metas.ui.web.window.descriptor.DocumentFieldDescriptor) DBException(org.adempiere.exceptions.DBException) EntityNotFoundException(de.metas.ui.web.exceptions.EntityNotFoundException) List(java.util.List) WebsocketSender(de.metas.ui.web.websocket.WebsocketSender) DocumentFieldWidgetType(de.metas.ui.web.window.descriptor.DocumentFieldWidgetType) IMsgBL(de.metas.i18n.IMsgBL) TranslatableStrings(de.metas.i18n.TranslatableStrings) IADTableDAO(org.adempiere.ad.table.api.IADTableDAO) Joiner(com.google.common.base.Joiner) LogManager(de.metas.logging.LogManager) I_WEBUI_Board_Lane(de.metas.ui.web.base.model.I_WEBUI_Board_Lane) BoardDescriptorBuilder(de.metas.ui.web.board.BoardDescriptor.BoardDescriptorBuilder) DocumentPath(de.metas.ui.web.window.datatypes.DocumentPath) SqlDocumentFieldDataBindingDescriptor(de.metas.ui.web.window.descriptor.sql.SqlDocumentFieldDataBindingDescriptor) DocumentId(de.metas.ui.web.window.datatypes.DocumentId) CurrencyId(de.metas.money.CurrencyId) LookupDescriptorProvider(de.metas.ui.web.window.descriptor.LookupDescriptorProvider) CurrencyRepository(de.metas.currency.CurrencyRepository) SqlLookupDescriptor(de.metas.ui.web.window.descriptor.sql.SqlLookupDescriptor) JSONBoardLaneChangedEvent(de.metas.ui.web.board.json.events.JSONBoardLaneChangedEvent) I_WEBUI_Board(de.metas.ui.web.base.model.I_WEBUI_Board) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) SQLException(java.sql.SQLException) DB(org.compiere.util.DB) LookupDescriptor(de.metas.ui.web.window.descriptor.LookupDescriptor) ImmutableList(com.google.common.collect.ImmutableList) SqlDocumentEntityDataBindingDescriptor(de.metas.ui.web.window.descriptor.sql.SqlDocumentEntityDataBindingDescriptor) DisplayType(org.compiere.util.DisplayType) DocumentEntityDescriptor(de.metas.ui.web.window.descriptor.DocumentEntityDescriptor) DocumentFilter(de.metas.ui.web.document.filter.DocumentFilter) I_AD_User(org.compiere.model.I_AD_User) DocumentFieldValueLoader(de.metas.ui.web.window.descriptor.sql.DocumentFieldValueLoader) LinkedHashSet(java.util.LinkedHashSet) OnVariableNotFound(org.adempiere.ad.expression.api.IExpressionEvaluator.OnVariableNotFound) JSONLookupValue(de.metas.ui.web.window.datatypes.json.JSONLookupValue) LookupValue(de.metas.ui.web.window.datatypes.LookupValue) AdWindowId(org.adempiere.ad.element.api.AdWindowId) Logger(org.slf4j.Logger) BoardFieldLoader(de.metas.ui.web.board.BoardCardFieldDescriptor.BoardFieldLoader) Evaluatees(org.compiere.util.Evaluatees) DocumentDescriptorFactory(de.metas.ui.web.window.descriptor.factory.DocumentDescriptorFactory) DocumentFilterParam(de.metas.ui.web.document.filter.DocumentFilterParam) IModelTranslationMap(de.metas.i18n.IModelTranslationMap) WindowId(de.metas.ui.web.window.datatypes.WindowId) IQueryBL(org.adempiere.ad.dao.IQueryBL) Amount(de.metas.currency.Amount) CCache(de.metas.cache.CCache) Services(de.metas.util.Services) Consumer(java.util.function.Consumer) NumberUtils(de.metas.util.NumberUtils) AdempiereException(org.adempiere.exceptions.AdempiereException) IValidationRuleFactory(org.adempiere.ad.validationRule.IValidationRuleFactory) CollectionUtils(de.metas.util.collections.CollectionUtils) Preconditions(com.google.common.base.Preconditions) IValidationRule(org.adempiere.ad.validationRule.IValidationRule) WebSocketConfig(de.metas.ui.web.websocket.WebSocketConfig) CompositeStringExpression(org.adempiere.ad.expression.api.impl.CompositeStringExpression) IModelTranslationMap(de.metas.i18n.IModelTranslationMap) SqlDocumentEntityDataBindingDescriptor(de.metas.ui.web.window.descriptor.sql.SqlDocumentEntityDataBindingDescriptor) EntityNotFoundException(de.metas.ui.web.exceptions.EntityNotFoundException) ToString(lombok.ToString) ITranslatableString(de.metas.i18n.ITranslatableString) DocumentFilter(de.metas.ui.web.document.filter.DocumentFilter) IValidationRuleFactory(org.adempiere.ad.validationRule.IValidationRuleFactory) AdWindowId(org.adempiere.ad.element.api.AdWindowId) LookupDescriptorProvider(de.metas.ui.web.window.descriptor.LookupDescriptorProvider) IQueryBL(org.adempiere.ad.dao.IQueryBL) BoardDescriptorBuilder(de.metas.ui.web.board.BoardDescriptor.BoardDescriptorBuilder) AdWindowId(org.adempiere.ad.element.api.AdWindowId) WindowId(de.metas.ui.web.window.datatypes.WindowId) IADTableDAO(org.adempiere.ad.table.api.IADTableDAO) IValidationRule(org.adempiere.ad.validationRule.IValidationRule) I_WEBUI_Board(de.metas.ui.web.base.model.I_WEBUI_Board) I_WEBUI_Board_Lane(de.metas.ui.web.base.model.I_WEBUI_Board_Lane) I_WEBUI_Board_CardField(de.metas.ui.web.base.model.I_WEBUI_Board_CardField) DocumentEntityDescriptor(de.metas.ui.web.window.descriptor.DocumentEntityDescriptor)

Example 2 with AdWindowId

use of org.adempiere.ad.element.api.AdWindowId in project metasfresh-webui-api by metasfresh.

the class WEBUI_Fact_Acct_Repost_SingleDocument method checkPreconditionsApplicable.

@Override
public ProcessPreconditionsResolution checkPreconditionsApplicable(IProcessPreconditionsContext context) {
    final String recordTableName = context.getTableName();
    if (I_Fact_Acct.Table_Name.equals(recordTableName) || WEBUI_Fact_Acct_Repost_ViewRows.TABLENAME_RV_UnPosted.contentEquals(recordTableName)) {
        return ProcessPreconditionsResolution.accept();
    } else {
        final AdWindowId adWindowId = context.getAdWindowId();
        final int recordId = context.getSingleSelectedRecordId();
        final DocumentPath documentPath = DocumentPath.rootDocumentPath(adWindowId, recordId);
        final Document document = documentsCollection.getDocumentReadonly(documentPath);
        final BooleanWithReason allowPosting = checkAllowReposting(document);
        return allowPosting.isTrue() ? ProcessPreconditionsResolution.accept() : ProcessPreconditionsResolution.reject(allowPosting.getReason()).toInternal();
    }
}
Also used : BooleanWithReason(de.metas.i18n.BooleanWithReason) DocumentPath(de.metas.ui.web.window.datatypes.DocumentPath) Document(de.metas.ui.web.window.model.Document) AdWindowId(org.adempiere.ad.element.api.AdWindowId)

Example 3 with AdWindowId

use of org.adempiere.ad.element.api.AdWindowId in project metasfresh-webui-api by metasfresh.

the class PurchaseCandidateReminderSchedulerRestController method assertAuth.

private void assertAuth() {
    userSession.assertLoggedIn();
    final AdWindowId purchaseCandidatesWindowId = RecordZoomWindowFinder.findAdWindowId(I_C_PurchaseCandidate.Table_Name).get();
    if (!userSession.getUserRolePermissions().checkWindowPermission(purchaseCandidatesWindowId).hasWriteAccess()) {
        throw new AdempiereException("No read/write access to purchase candidates window");
    }
}
Also used : AdempiereException(org.adempiere.exceptions.AdempiereException) AdWindowId(org.adempiere.ad.element.api.AdWindowId)

Example 4 with AdWindowId

use of org.adempiere.ad.element.api.AdWindowId in project metasfresh-webui-api by metasfresh.

the class DocumentPermissionsHelper method checkWindowAccess.

public static ElementPermission checkWindowAccess(@NonNull final DocumentEntityDescriptor entityDescriptor, final IUserRolePermissions permissions) {
    final AdWindowId adWindowId = entityDescriptor.getWindowId().toAdWindowId();
    final ElementPermission windowPermission = permissions.checkWindowPermission(adWindowId);
    final boolean readAccess = windowPermission.hasReadAccess();
    final boolean writeAccess = windowPermission.hasWriteAccess();
    // no access
    if (!readAccess && !writeAccess) {
        final AdempiereException ex = DocumentPermissionException.of(DocumentPermission.WindowAccess, "@NoAccess@").setParameter("Role", permissions.getName()).setParameter("WindowName", entityDescriptor.getCaption()).setParameter("AD_Window_ID", adWindowId);
        logAccessIfWindowExistsAndThrowEx(permissions, adWindowId, ex);
    }
    return windowPermission;
}
Also used : AdempiereException(org.adempiere.exceptions.AdempiereException) ElementPermission(de.metas.security.permissions.ElementPermission) AdWindowId(org.adempiere.ad.element.api.AdWindowId)

Example 5 with AdWindowId

use of org.adempiere.ad.element.api.AdWindowId in project metasfresh-webui-api by metasfresh.

the class DocumentPermissionsHelper method assertViewAccess.

/**
 * Asserts view access
 *
 * @param windowId
 * @param viewId optional viewId, used only for error reporting
 * @param permissions
 */
public static void assertViewAccess(final WindowId windowId, @Nullable final String viewId, final IUserRolePermissions permissions) {
    final AdWindowId adWindowId = windowId.toAdWindowIdOrNull();
    if (adWindowId == null) {
        // accept it
        return;
    }
    // 
    // Check AD_Window_ID access
    final ElementPermission windowPermission = permissions.checkWindowPermission(adWindowId);
    if (!windowPermission.hasReadAccess()) {
        final AdempiereException ex = DocumentPermissionException.of(DocumentPermission.WindowAccess, "@NoAccess@").setParameter("roleName", permissions.getName()).setParameter("view", viewId).setParameter("windowId", adWindowId);
        logAccessIfWindowExistsAndThrowEx(permissions, adWindowId, ex);
    }
}
Also used : AdempiereException(org.adempiere.exceptions.AdempiereException) ElementPermission(de.metas.security.permissions.ElementPermission) AdWindowId(org.adempiere.ad.element.api.AdWindowId)

Aggregations

AdWindowId (org.adempiere.ad.element.api.AdWindowId)12 DocumentPath (de.metas.ui.web.window.datatypes.DocumentPath)4 AdempiereException (org.adempiere.exceptions.AdempiereException)4 EntityNotFoundException (de.metas.ui.web.exceptions.EntityNotFoundException)3 CCache (de.metas.cache.CCache)2 IModelTranslationMap (de.metas.i18n.IModelTranslationMap)2 LogManager (de.metas.logging.LogManager)2 OrgId (de.metas.organization.OrgId)2 ElementPermission (de.metas.security.permissions.ElementPermission)2 DocumentId (de.metas.ui.web.window.datatypes.DocumentId)2 LookupValue (de.metas.ui.web.window.datatypes.LookupValue)2 WindowId (de.metas.ui.web.window.datatypes.WindowId)2 DocumentEntityDescriptor (de.metas.ui.web.window.descriptor.DocumentEntityDescriptor)2 RecordZoomWindowFinder (org.adempiere.model.RecordZoomWindowFinder)2 Joiner (com.google.common.base.Joiner)1 Preconditions (com.google.common.base.Preconditions)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Amount (de.metas.currency.Amount)1 CurrencyCode (de.metas.currency.CurrencyCode)1