use of org.adempiere.ad.dao.IQueryBL 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();
int adWindowId = 0;
if (adWindowId <= 0) {
adWindowId = RecordZoomWindowFinder.findAD_Window_ID(tableName);
}
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(tableName, 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.documentFilter(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();
}
use of org.adempiere.ad.dao.IQueryBL in project metasfresh-webui-api by metasfresh.
the class MaterialCockpitRowRepository method retrieveAllProducts.
private List<I_M_Product> retrieveAllProducts(final int adOrgId) {
final IQueryBL queryBL = Services.get(IQueryBL.class);
final //
ICompositeQueryFilter<I_M_Product> relevantProductFilter = queryBL.createCompositeQueryFilter(I_M_Product.class).setJoinOr().addEqualsFilter(I_M_Product.COLUMN_IsSold, true).addEqualsFilter(I_M_Product.COLUMN_IsPurchased, true).addEqualsFilter(I_M_Product.COLUMN_IsStocked, true);
final //
List<I_M_Product> products = queryBL.createQueryBuilder(I_M_Product.class).addOnlyActiveRecordsFilter().addInArrayFilter(I_M_Product.COLUMN_AD_Org_ID, adOrgId, 0).filter(relevantProductFilter).create().list();
return products;
}
use of org.adempiere.ad.dao.IQueryBL in project metasfresh-webui-api by metasfresh.
the class ProductFilterUtil method createProductQueryOrNull.
public static IQuery<I_M_Product> createProductQueryOrNull(final ProductFilterVO productFilterVO) {
if (productFilterVO == null) {
return null;
}
final IQueryBL queryBL = Services.get(IQueryBL.class);
final IQueryBuilder<I_M_Product> productQuery = queryBL.createQueryBuilder(I_M_Product.class).addOnlyActiveRecordsFilter();
boolean anyRestrictionAdded = false;
final String productName = productFilterVO.getProductName();
if (!Check.isEmpty(productName, true)) {
final boolean ignoreCase = true;
productQuery.addStringLikeFilter(I_M_Product.COLUMN_Name, productName, ignoreCase);
anyRestrictionAdded = true;
}
final String productValue = productFilterVO.getProductValue();
if (!Check.isEmpty(productValue, true)) {
final boolean ignoreCase = true;
productQuery.addStringLikeFilter(I_M_Product.COLUMN_Value, productValue, ignoreCase);
anyRestrictionAdded = true;
}
final int productCategoryId = productFilterVO.getProductCategoryId();
if (productCategoryId > 0) {
productQuery.addEqualsFilter(I_M_Product.COLUMN_M_Product_Category_ID, productCategoryId);
anyRestrictionAdded = true;
}
final Boolean isPurchased = productFilterVO.getIsPurchased();
if (isPurchased != null) {
productQuery.addEqualsFilter(I_M_Product.COLUMN_IsPurchased, isPurchased);
anyRestrictionAdded = true;
}
final Boolean isSold = productFilterVO.getIsSold();
if (isSold != null) {
productQuery.addEqualsFilter(I_M_Product.COLUMN_IsSold, isSold);
anyRestrictionAdded = true;
}
//
if (!anyRestrictionAdded) {
return null;
}
return productQuery.create();
}
use of org.adempiere.ad.dao.IQueryBL in project metasfresh-webui-api by metasfresh.
the class SqlDocumentsRepository method toQueryBuilder.
private static final IQueryBuilder<Object> toQueryBuilder(final SqlDocumentEntityDataBindingDescriptor dataBinding, final DocumentId documentId) {
final String tableName = dataBinding.getTableName();
final List<SqlDocumentFieldDataBindingDescriptor> keyFields = dataBinding.getKeyFields();
final int keyFieldsCount = keyFields.size();
if (keyFieldsCount == 0) {
throw new AdempiereException("No primary key defined for " + tableName);
}
final List<Object> keyParts = documentId.toComposedKeyParts();
if (keyFieldsCount != keyParts.size()) {
throw new AdempiereException("Invalid documentId '" + documentId + "'. It shall have " + keyFieldsCount + " parts but it has " + keyParts.size());
}
final IQueryBL queryBL = Services.get(IQueryBL.class);
final IQueryBuilder<Object> queryBuilder = queryBL.createQueryBuilder(tableName, PlainContextAware.newWithThreadInheritedTrx());
for (int i = 0; i < keyFieldsCount; i++) {
final SqlDocumentFieldDataBindingDescriptor keyField = keyFields.get(i);
final String keyColumnName = keyField.getColumnName();
final Object keyValue = convertValueToPO(keyParts.get(i), keyColumnName, keyField.getWidgetType(), keyField.getSqlValueClass());
queryBuilder.addEqualsFilter(keyColumnName, keyValue);
}
return queryBuilder;
}
use of org.adempiere.ad.dao.IQueryBL in project metasfresh-webui-api by metasfresh.
the class StockFilters method createStockQueryFor.
public static IQuery<I_MD_Stock> createStockQueryFor(@NonNull final List<DocumentFilter> filters) {
final IQueryBL queryBL = Services.get(IQueryBL.class);
final IQueryBuilder<I_MD_Stock> queryBuilder = queryBL.createQueryBuilder(I_MD_Stock.class).addOnlyActiveRecordsFilter();
boolean anyRestrictionAdded = false;
if (augmentQueryBuilder(queryBuilder, ProductFilterUtil.extractProductFilterVO(filters))) {
anyRestrictionAdded = true;
}
if (anyRestrictionAdded) {
return queryBuilder.create();
} else {
// avoid memory problems in case the filters are accidentally empty
return queryBuilder.filter(ConstantQueryFilter.of(false)).create();
}
}
Aggregations