Search in sources :

Example 6 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class ValidatorService method validateImportRequiredField.

private void validateImportRequiredField(int line, Class<?> model, String fieldName, FileField fileField, List<String> relationalFieldList) throws IOException, ClassNotFoundException {
    Mapper mapper = advancedImportService.getMapper(model.getName());
    String field = getField(fileField);
    Integer rowNum = fileField.getIsMatchWithFile() ? line : null;
    int importType = fileField.getImportType();
    for (Property prop : mapper.getProperties()) {
        if (prop.isRequired()) {
            if (prop.getName().equals(fieldName) && importType == FileFieldRepository.IMPORT_TYPE_IGNORE_EMPTY) {
                logService.addLog(IExceptionMessage.ADVANCED_IMPORT_LOG_5, field, rowNum);
            } else if ((importType == FileFieldRepository.IMPORT_TYPE_FIND_NEW || importType == FileFieldRepository.IMPORT_TYPE_NEW) && field.contains(".") && !fileField.getTargetType().equals("MetaFile")) {
                String newField = StringUtils.substringBeforeLast(field, ".");
                newField = newField + "." + prop.getName();
                if (!relationalFieldList.contains(newField)) {
                    logService.addLog(IExceptionMessage.ADVANCED_IMPORT_LOG_3, newField, null);
                }
            }
        }
    }
}
Also used : BigInteger(java.math.BigInteger) Mapper(com.axelor.db.mapper.Mapper) Property(com.axelor.db.mapper.Property)

Example 7 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class ValidatorService method validateData.

private void validateData(String[] dataRow, int line, boolean isConfig, FileTab fileTab) throws IOException, ClassNotFoundException {
    Map<String, Object> map = isConfig ? fieldMap : titleMap;
    for (int fieldIndex = 0; fieldIndex < fileTab.getFileFieldList().size(); fieldIndex++) {
        FileField fileField = fileTab.getFileFieldList().get(fieldIndex);
        if (!fileField.getIsMatchWithFile() || !Strings.isNullOrEmpty(fileField.getExpression())) {
            continue;
        }
        Mapper mapper = null;
        Property property = null;
        String key = null;
        if (isConfig) {
            key = this.getField(fileField);
        } else {
            key = fileField.getColumnTitle();
        }
        int cellIndex = 0;
        if (map.containsKey(key)) {
            cellIndex = (int) map.get(key);
        }
        cellIndex = (!isConfig && !fileTab.getAdvancedImport().getIsHeader()) ? fieldIndex : cellIndex;
        if (fileField.getImportField() != null) {
            mapper = advancedImportService.getMapper(fileField.getImportField().getMetaModel().getFullName());
            property = mapper.getProperty(fileField.getImportField().getName());
        }
        if (property != null && Strings.isNullOrEmpty(fileField.getSubImportField())) {
            if (this.validateDataRequiredField(dataRow, cellIndex, line, Class.forName(fileTab.getMetaModel().getFullName()), property.getName(), fileField)) {
                continue;
            }
            if (!Strings.isNullOrEmpty(property.getSelection()) && fileField.getForSelectUse() != FileFieldRepository.SELECT_USE_VALUES) {
                continue;
            }
            this.validateDataType(dataRow, cellIndex, line, property.getJavaType().getSimpleName(), fileField);
        } else if (!Strings.isNullOrEmpty(fileField.getSubImportField())) {
            Property subProperty = this.getAndValidateSubField(line, property, fileField, true);
            if (subProperty != null) {
                if (this.validateDataRequiredField(dataRow, cellIndex, line, subProperty.getEntity(), subProperty.getName(), fileField)) {
                    continue;
                }
                if (!Strings.isNullOrEmpty(subProperty.getSelection()) && fileField.getForSelectUse() != FileFieldRepository.SELECT_USE_VALUES) {
                    continue;
                }
                this.validateDataType(dataRow, cellIndex, line, subProperty.getJavaType().getSimpleName(), fileField);
            }
        }
    }
}
Also used : Mapper(com.axelor.db.mapper.Mapper) FileField(com.axelor.apps.base.db.FileField) Property(com.axelor.db.mapper.Property)

Example 8 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class ProductStockRepository method save.

public Product save(Product product) {
    WeightedAveragePriceService weightedAveragePriceService = Beans.get(WeightedAveragePriceService.class);
    Set<MetaField> specificProductFieldSet = appBaseService.getAppBase().getCompanySpecificProductFieldsSet();
    if (!specificProductFieldSet.isEmpty() && appBaseService.getAppBase().getEnableMultiCompany()) {
        ArrayList<Company> productCompanyList = new ArrayList<>();
        if (product.getProductCompanyList() != null) {
            for (ProductCompany productCompany : product.getProductCompanyList()) {
                productCompanyList.add(productCompany.getCompany());
            }
        }
        Mapper mapper = Mapper.of(Product.class);
        List<StockConfig> stockConfigList = Beans.get(StockConfigRepository.class).all().fetch();
        for (StockConfig stockConfig : stockConfigList) {
            if (stockConfig.getCompany() != null && !productCompanyList.contains(stockConfig.getCompany()) && stockConfig.getReceiptDefaultStockLocation() != null && (stockConfig.getCompany().getArchived() == null || !stockConfig.getCompany().getArchived())) {
                ProductCompany productCompany = new ProductCompany();
                for (MetaField specificField : specificProductFieldSet) {
                    mapper.set(productCompany, specificField.getName(), mapper.get(product, specificField.getName()));
                }
                // specific case for avgPrice per company
                productCompany.setAvgPrice(weightedAveragePriceService.computeAvgPriceForCompany(product, stockConfig.getCompany()));
                productCompany.setCompany(stockConfig.getCompany());
                productCompany.setProduct(product);
                product.addProductCompanyListItem(productCompany);
            }
        }
    }
    return super.save(product);
}
Also used : Mapper(com.axelor.db.mapper.Mapper) Company(com.axelor.apps.base.db.Company) ProductCompany(com.axelor.apps.base.db.ProductCompany) StockConfig(com.axelor.apps.stock.db.StockConfig) MetaField(com.axelor.meta.db.MetaField) WeightedAveragePriceService(com.axelor.apps.stock.service.WeightedAveragePriceService) ArrayList(java.util.ArrayList) ProductCompany(com.axelor.apps.base.db.ProductCompany)

Example 9 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class DuplicateObjectsService method concatFields.

/*
   * get all records for duplicate records
   */
private String concatFields(Class<?> modelClass, Set<String> fieldSet) throws AxelorException {
    StringBuilder fields = new StringBuilder("LOWER(concat(");
    Mapper mapper = Mapper.of(modelClass);
    int count = 0;
    for (String field : fieldSet) {
        Property property = mapper.getProperty(field);
        if (property == null) {
            throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.GENERAL_8), field, modelClass.getSimpleName());
        }
        if (property.isCollection()) {
            throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.GENERAL_9), field);
        }
        if (count != 0) {
            fields.append(",");
        }
        count++;
        fields.append("cast(self" + "." + field);
        if (property.getTarget() != null) {
            fields.append(".id");
        }
        fields.append(" as string)");
    }
    fields.append("))");
    return fields.toString();
}
Also used : Mapper(com.axelor.db.mapper.Mapper) AxelorException(com.axelor.exception.AxelorException) Property(com.axelor.db.mapper.Property)

Example 10 with Mapper

use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.

the class DuplicateObjectsService method removeDuplicate.

@Transactional
public void removeDuplicate(List<Long> selectedIds, String modelName) {
    List<Object> duplicateObjects = getDuplicateObject(selectedIds, modelName);
    Object originalObjct = getOriginalObject(selectedIds, modelName);
    List<MetaField> allField = metaFieldRepo.all().filter("(relationship = 'ManyToOne' AND typeName = ?1) OR (relationship = 'ManyToMany' AND (typeName = ?1 OR metaModel.name =?1))", modelName).fetch();
    for (MetaField metaField : allField) {
        if ("ManyToOne".equals(metaField.getRelationship())) {
            Query update = JPA.em().createQuery("UPDATE " + metaField.getMetaModel().getFullName() + " self SET self." + metaField.getName() + " = :value WHERE self." + metaField.getName() + " in (:duplicates)");
            update.setParameter("value", originalObjct);
            update.setParameter("duplicates", duplicateObjects);
            update.executeUpdate();
        } else if ("ManyToMany".equals(metaField.getRelationship())) {
            if (metaField.getTypeName().equals(modelName)) {
                Query select = JPA.em().createQuery("select self from " + metaField.getMetaModel().getFullName() + " self LEFT JOIN self." + metaField.getName() + " as x WHERE x IN (:ids)");
                select.setParameter("ids", duplicateObjects);
                List<?> list = select.getResultList();
                for (Object obj : list) {
                    Set<Object> items = (Set<Object>) Mapper.of(obj.getClass()).get(obj, metaField.getName());
                    for (Object dupObj : duplicateObjects) {
                        if (items.contains(dupObj)) {
                            items.remove(dupObj);
                        }
                    }
                    items.add(originalObjct);
                }
            }
            Mapper mapper = Mapper.of(originalObjct.getClass());
            Set<Object> existRelationalObjects = (Set<Object>) mapper.get(originalObjct, metaField.getName());
            for (int i = 0; i < duplicateObjects.size(); i++) {
                Set<Object> newRelationalObjects = (Set<Object>) mapper.get(duplicateObjects.get(i), metaField.getName());
                if (newRelationalObjects != null) {
                    existRelationalObjects.addAll(newRelationalObjects);
                    mapper.set(duplicateObjects.get(i), metaField.getName(), new HashSet<>());
                }
            }
        }
    }
    JPA.em().flush();
    JPA.em().clear();
    for (Object obj : getDuplicateObject(selectedIds, modelName)) {
        JPA.em().remove(obj);
    }
}
Also used : Mapper(com.axelor.db.mapper.Mapper) Set(java.util.Set) HashSet(java.util.HashSet) Query(javax.persistence.Query) MetaField(com.axelor.meta.db.MetaField) List(java.util.List) HashSet(java.util.HashSet) Transactional(com.google.inject.persist.Transactional)

Aggregations

Mapper (com.axelor.db.mapper.Mapper)44 Property (com.axelor.db.mapper.Property)19 AxelorException (com.axelor.exception.AxelorException)13 Model (com.axelor.db.Model)12 MetaField (com.axelor.meta.db.MetaField)10 ArrayList (java.util.ArrayList)10 MetaModel (com.axelor.meta.db.MetaModel)7 File (java.io.File)6 IOException (java.io.IOException)6 FileField (com.axelor.apps.base.db.FileField)5 Transactional (com.google.inject.persist.Transactional)5 TraceBackService (com.axelor.exception.service.TraceBackService)4 MetaFiles (com.axelor.meta.MetaFiles)4 MetaModelRepository (com.axelor.meta.db.repo.MetaModelRepository)4 List (java.util.List)4 Inflector (com.axelor.common.Inflector)3 MetaFile (com.axelor.meta.db.MetaFile)3 MetaJsonField (com.axelor.meta.db.MetaJsonField)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 Strings (com.google.common.base.Strings)3