| @Table(name = "tb_code_details") | @Table(name = "tb_code_details") | ||||
| @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) | @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) | ||||
| @Document(indexName = "smf_tbcodedetails") | @Document(indexName = "smf_tbcodedetails") | ||||
| public class TBCodeDetails implements Serializable { | |||||
| public class TBCodeDetails implements Serializable { | |||||
| private static final long serialVersionUID = 1L; | private static final long serialVersionUID = 1L; | ||||
| package vn.azteam.tpf.repository; | package vn.azteam.tpf.repository; | ||||
| import org.springframework.data.repository.query.Param; | |||||
| import vn.azteam.tpf.domain.TBActivityType; | import vn.azteam.tpf.domain.TBActivityType; | ||||
| import org.springframework.data.jpa.repository.*; | import org.springframework.data.jpa.repository.*; | ||||
| import org.springframework.stereotype.Repository; | import org.springframework.stereotype.Repository; | ||||
| import java.util.List; | |||||
| import java.util.Optional; | import java.util.Optional; | ||||
| @Repository | @Repository | ||||
| public interface TBActivityTypeRepository extends JpaRepository<TBActivityType, Long>, JpaSpecificationExecutor<TBActivityType> { | public interface TBActivityTypeRepository extends JpaRepository<TBActivityType, Long>, JpaSpecificationExecutor<TBActivityType> { | ||||
| Optional<TBActivityType> getByName(String name); | Optional<TBActivityType> getByName(String name); | ||||
| @Query(value = "select tbt from TBActivityType tbt where tbt.isAfterHarvest = :isAfterHarvest") | |||||
| List<TBActivityType> findByAfterHarvest(@Param("isAfterHarvest") Boolean isAfterHarvest); | |||||
| } | } |
| //@Query("select tb_crop from TBCrop tb_crop left join fetch tb_crop.tbDetailUsers where tb_crop.id =:id") | //@Query("select tb_crop from TBCrop tb_crop left join fetch tb_crop.tbDetailUsers where tb_crop.id =:id") | ||||
| Optional<TBCode> findById(Long id); | Optional<TBCode> findById(Long id); | ||||
| Optional<TBCode> findByCode(String code); | |||||
| } | } |
| package vn.azteam.tpf.service; | package vn.azteam.tpf.service; | ||||
| import java.util.ArrayList; | |||||
| import java.util.Arrays; | |||||
| import java.util.List; | |||||
| import java.util.stream.Collectors; | |||||
| import javax.persistence.EntityManager; | |||||
| import javax.persistence.Query; | |||||
| import javax.persistence.criteria.JoinType; | |||||
| import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
| import io.github.jhipster.service.QueryService; | |||||
| import io.github.jhipster.service.filter.InstantFilter; | import io.github.jhipster.service.filter.InstantFilter; | ||||
| import io.github.jhipster.service.filter.LongFilter; | |||||
| import io.github.jhipster.service.filter.StringFilter; | import io.github.jhipster.service.filter.StringFilter; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Propagation; | import org.springframework.transaction.annotation.Propagation; | ||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||
| import io.github.jhipster.service.QueryService; | |||||
| import org.springframework.util.StringUtils; | import org.springframework.util.StringUtils; | ||||
| import org.springframework.web.multipart.MultipartFile; | import org.springframework.web.multipart.MultipartFile; | ||||
| import vn.azteam.tpf.Constants.Constants; | import vn.azteam.tpf.Constants.Constants; | ||||
| import vn.azteam.tpf.domain.TBActivityType; | import vn.azteam.tpf.domain.TBActivityType; | ||||
| import vn.azteam.tpf.domain.*; // for static metamodels | |||||
| import vn.azteam.tpf.domain.TBActivityType_; | |||||
| import vn.azteam.tpf.domain.TBCustomer_; | |||||
| import vn.azteam.tpf.domain.TBDetailUser_; | |||||
| import vn.azteam.tpf.repository.TBActivityTypeRepository; | import vn.azteam.tpf.repository.TBActivityTypeRepository; | ||||
| import vn.azteam.tpf.service.dto.*; | |||||
| import vn.azteam.tpf.service.dto.TBActivityTypeCriteria; | |||||
| import vn.azteam.tpf.service.dto.TBActivityTypeDTO; | |||||
| import vn.azteam.tpf.service.dto.UserDTO; | |||||
| import vn.azteam.tpf.service.mapper.TBActivityTypeMapper; | import vn.azteam.tpf.service.mapper.TBActivityTypeMapper; | ||||
| import javax.persistence.EntityManager; | |||||
| import javax.persistence.Query; | |||||
| import javax.persistence.criteria.JoinType; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Arrays; | |||||
| import java.util.List; | |||||
| import java.util.stream.Collectors; | |||||
| /** | /** | ||||
| * Service for executing complex queries for TBActivityType entities in the database. | * Service for executing complex queries for TBActivityType entities in the database. | ||||
| * The main input is a {@link TBActivityTypeCriteria} which gets converted to {@link Specification}, | * The main input is a {@link TBActivityTypeCriteria} which gets converted to {@link Specification}, | ||||
| /** | /** | ||||
| * Return a {@link List} of {@link TBActivityTypeDTO} which matches the criteria from the database | * Return a {@link List} of {@link TBActivityTypeDTO} which matches the criteria from the database | ||||
| * | |||||
| * @param criteria The object which holds all the filters, which the entities should match. | * @param criteria The object which holds all the filters, which the entities should match. | ||||
| * @return the matching entities. | * @return the matching entities. | ||||
| */ | */ | ||||
| return tBActivityTypeMapper.toDto(tBActivityTypeRepository.findAll(specification)); | return tBActivityTypeMapper.toDto(tBActivityTypeRepository.findAll(specification)); | ||||
| } | } | ||||
| @Transactional(readOnly = true) | |||||
| public List<TBActivityTypeDTO> findByAfterHarvestTrue() { | |||||
| log.debug("find by findByAfterHarvestTrue"); | |||||
| return tBActivityTypeMapper.toDto(tBActivityTypeRepository.findByAfterHarvest(Boolean.TRUE)); | |||||
| } | |||||
| /** | /** | ||||
| * Return a {@link Page} of {@link TBActivityTypeDTO} which matches the criteria from the database | * Return a {@link Page} of {@link TBActivityTypeDTO} which matches the criteria from the database | ||||
| * | |||||
| * @param criteria The object which holds all the filters, which the entities should match. | * @param criteria The object which holds all the filters, which the entities should match. | ||||
| * @param page The page, which should be returned. | |||||
| * @param page The page, which should be returned. | |||||
| * @return the matching entities. | * @return the matching entities. | ||||
| */ | */ | ||||
| @Transactional(readOnly = true) | @Transactional(readOnly = true) | ||||
| /** | /** | ||||
| * Return the number of matching entities in the database | * Return the number of matching entities in the database | ||||
| * | |||||
| * @param criteria The object which holds all the filters, which the entities should match. | * @param criteria The object which holds all the filters, which the entities should match. | ||||
| * @return the number of matching entities. | * @return the number of matching entities. | ||||
| */ | */ | ||||
| } | } | ||||
| public TBActivityTypeDTO findActivityTypeByName(String name) { | public TBActivityTypeDTO findActivityTypeByName(String name) { | ||||
| List<TBActivityType>tbActivityTypes = tBActivityTypeRepository.findAll().stream() | |||||
| List<TBActivityType> tbActivityTypes = tBActivityTypeRepository.findAll().stream() | |||||
| .filter(x -> x.getName().equals(name)) | .filter(x -> x.getName().equals(name)) | ||||
| .collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
| List<TBActivityTypeDTO>tbActivityTypesDTO = tBActivityTypeMapper.toDto(tbActivityTypes); | |||||
| List<TBActivityTypeDTO> tbActivityTypesDTO = tBActivityTypeMapper.toDto(tbActivityTypes); | |||||
| return tbActivityTypesDTO.size() == 0 ? null : tbActivityTypesDTO.get(0); | return tbActivityTypesDTO.size() == 0 ? null : tbActivityTypesDTO.get(0); | ||||
| } | } | ||||
| } | } | ||||
| public TBActivityTypeDTO updateUploadedFiles(TBActivityTypeDTO tBActivityTypeDTO, | public TBActivityTypeDTO updateUploadedFiles(TBActivityTypeDTO tBActivityTypeDTO, | ||||
| MultipartFile[] images, | |||||
| String deletedImage) { | |||||
| MultipartFile[] images, | |||||
| String deletedImage) { | |||||
| if (deletedImage != null && deletedImage != Constants.EMPTY) { | if (deletedImage != null && deletedImage != Constants.EMPTY) { | ||||
| this.fileStorageService.removeFile("url_logo", deletedImage); | this.fileStorageService.removeFile("url_logo", deletedImage); | ||||
| } | } | ||||
| " from tb_activity_type as at\n" + | " from tb_activity_type as at\n" + | ||||
| " where at.deleted_date IS NULL "; | " where at.deleted_date IS NULL "; | ||||
| if(query != null && !query.isEmpty()) { | |||||
| if (query != null && !query.isEmpty()) { | |||||
| sqlString = sqlString + " and ( at.description like '%" + query + "%')\n"; | sqlString = sqlString + " and ( at.description like '%" + query + "%')\n"; | ||||
| } | } | ||||
| List<TBActivityTypeDTO> tbActivityTypeDTOs = tBActivityTypeMapper.toDto(tbActivityTypeQuery.getResultList()); | List<TBActivityTypeDTO> tbActivityTypeDTOs = tBActivityTypeMapper.toDto(tbActivityTypeQuery.getResultList()); | ||||
| int start = Math.toIntExact(pageable.getOffset()); | int start = Math.toIntExact(pageable.getOffset()); | ||||
| int end = Math.toIntExact((start + pageable.getPageSize()) > tbActivityTypeDTOs.size() ? tbActivityTypeDTOs.size() : (start + pageable.getPageSize())); | int end = Math.toIntExact((start + pageable.getPageSize()) > tbActivityTypeDTOs.size() ? tbActivityTypeDTOs.size() : (start + pageable.getPageSize())); | ||||
| if(tbActivityTypeDTOs.size() > start) { | |||||
| if (tbActivityTypeDTOs.size() > start) { | |||||
| return new PageImpl<>(tbActivityTypeDTOs.subList(start, end), pageable, tbActivityTypeDTOs.size()); | return new PageImpl<>(tbActivityTypeDTOs.subList(start, end), pageable, tbActivityTypeDTOs.size()); | ||||
| } | } | ||||
| return new PageImpl<>(Lists.newArrayList(), pageable, tbActivityTypeDTOs.size()); | return new PageImpl<>(Lists.newArrayList(), pageable, tbActivityTypeDTOs.size()); |
| package vn.azteam.tpf.service; | package vn.azteam.tpf.service; | ||||
| import vn.azteam.tpf.service.dto.TBCodeDetailsAndActivityDTO; | |||||
| import vn.azteam.tpf.service.dto.TBCodeDetailsCreationDTO; | import vn.azteam.tpf.service.dto.TBCodeDetailsCreationDTO; | ||||
| import vn.azteam.tpf.service.dto.TBCodeDetailsDTO; | import vn.azteam.tpf.service.dto.TBCodeDetailsDTO; | ||||
| import vn.azteam.tpf.service.dto.TBCropDetailDTOV2; | |||||
| import vn.azteam.tpf.web.rest.errors.BadRequestAlertException; | import vn.azteam.tpf.web.rest.errors.BadRequestAlertException; | ||||
| import java.util.List; | import java.util.List; | ||||
| List<TBCodeDetailsDTO> saveAll(List<TBCodeDetailsCreationDTO> tBCodeDetailsDTOs); | List<TBCodeDetailsDTO> saveAll(List<TBCodeDetailsCreationDTO> tBCodeDetailsDTOs); | ||||
| TBCropDetailDTOV2 updateNumberScan(String code) throws BadRequestAlertException; | |||||
| TBCodeDetailsAndActivityDTO updateNumberScan(String code) throws BadRequestAlertException; | |||||
| Optional<TBCodeDetailsDTO> updateStatusTBCodeDetails(TBCodeDetailsDTO tBCodeDetailsDTO); | Optional<TBCodeDetailsDTO> updateStatusTBCodeDetails(TBCodeDetailsDTO tBCodeDetailsDTO); | ||||
| } | } |
| package vn.azteam.tpf.service; | package vn.azteam.tpf.service; | ||||
| import vn.azteam.tpf.domain.TBCodeStatusEnum; | |||||
| import vn.azteam.tpf.service.dto.TBCodeDTO; | |||||
| import vn.azteam.tpf.service.dto.TBCodeUpdateDTO; | |||||
| import vn.azteam.tpf.service.dto.TBCropDTO; | |||||
| import vn.azteam.tpf.service.dto.TBCodeDTO; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Optional; | import java.util.Optional; | ||||
| package vn.azteam.tpf.service.dto; | |||||
| import java.io.Serializable; | |||||
| import java.time.Instant; | |||||
| public class ActivityCodeCreationDTO implements Serializable { | |||||
| private Long tbCropId; | |||||
| private Long activityTypeId; | |||||
| private Instant executeDate; | |||||
| private String description; | |||||
| private String location; | |||||
| public Long getTbCropId() { | |||||
| return tbCropId; | |||||
| } | |||||
| public void setTbCropId(Long tbCropId) { | |||||
| this.tbCropId = tbCropId; | |||||
| } | |||||
| public Long getActivityTypeId() { | |||||
| return activityTypeId; | |||||
| } | |||||
| public void setActivityTypeId(Long activityTypeId) { | |||||
| this.activityTypeId = activityTypeId; | |||||
| } | |||||
| public Instant getExecuteDate() { | |||||
| return executeDate; | |||||
| } | |||||
| public void setExecuteDate(Instant executeDate) { | |||||
| this.executeDate = executeDate; | |||||
| } | |||||
| public String getDescription() { | |||||
| return description; | |||||
| } | |||||
| public void setDescription(String description) { | |||||
| this.description = description; | |||||
| } | |||||
| public String getLocation() { | |||||
| return location; | |||||
| } | |||||
| public void setLocation(String location) { | |||||
| this.location = location; | |||||
| } | |||||
| } |
| package vn.azteam.tpf.service.dto; | package vn.azteam.tpf.service.dto; | ||||
| import java.time.Instant; | |||||
| import java.io.Serializable; | import java.io.Serializable; | ||||
| import java.time.Instant; | |||||
| import java.util.Objects; | import java.util.Objects; | ||||
| /** | /** | ||||
| private String activityTypeDescription; | private String activityTypeDescription; | ||||
| private Boolean isAfterHarvest = Boolean.FALSE; | |||||
| public Long getId() { | public Long getId() { | ||||
| return id; | return id; | ||||
| } | } | ||||
| this.activityTypeDescription = activityTypeDescription; | this.activityTypeDescription = activityTypeDescription; | ||||
| } | } | ||||
| public Boolean getAfterHarvest() { | |||||
| return isAfterHarvest; | |||||
| } | |||||
| public void setAfterHarvest(Boolean afterHarvest) { | |||||
| isAfterHarvest = afterHarvest; | |||||
| } | |||||
| @Override | @Override | ||||
| public boolean equals(Object o) { | public boolean equals(Object o) { | ||||
| if (this == o) { | if (this == o) { |
| package vn.azteam.tpf.service.dto; | |||||
| import java.io.Serializable; | |||||
| import java.util.List; | |||||
| public class TBCodeDetailsAndActivityDTO implements Serializable { | |||||
| private String description; | |||||
| private TBCodeDetailsDTO tbCodeDetailsDTO; | |||||
| private TBCropDTO tbCropDTO; | |||||
| // Use for web only | |||||
| private ActivityTimelineDTO activityTimeline; | |||||
| // Use for app only | |||||
| private List<TBActivityDTO> activities; | |||||
| public TBCodeDetailsDTO getTbCodeDetailsDTO() { | |||||
| return tbCodeDetailsDTO; | |||||
| } | |||||
| public void setTbCodeDetailsDTO(TBCodeDetailsDTO tbCodeDetailsDTO) { | |||||
| this.tbCodeDetailsDTO = tbCodeDetailsDTO; | |||||
| } | |||||
| public TBCropDTO getTbCropDTO() { | |||||
| return tbCropDTO; | |||||
| } | |||||
| public void setTbCropDTO(TBCropDTO tbCropDTO) { | |||||
| this.tbCropDTO = tbCropDTO; | |||||
| } | |||||
| public ActivityTimelineDTO getActivityTimeline() { | |||||
| return activityTimeline; | |||||
| } | |||||
| public void setActivityTimeline(ActivityTimelineDTO activityTimeline) { | |||||
| this.activityTimeline = activityTimeline; | |||||
| } | |||||
| public List<TBActivityDTO> getActivities() { | |||||
| return activities; | |||||
| } | |||||
| public void setActivities(List<TBActivityDTO> activities) { | |||||
| this.activities = activities; | |||||
| } | |||||
| public String getDescription() { | |||||
| return description; | |||||
| } | |||||
| public void setDescription(String description) { | |||||
| this.description = description; | |||||
| } | |||||
| } |
| package vn.azteam.tpf.service.dto; | |||||
| import java.io.Serializable; | |||||
| import java.time.Instant; | |||||
| import java.util.List; | |||||
| /** | |||||
| * A DTO for the TBCrop entity. | |||||
| */ | |||||
| public class TBCropDetailDTOV2 implements Serializable { | |||||
| private TBCropDTO tbCropDTO; | |||||
| // Use for web only | |||||
| private ActivityTimelineDTO activityTimeline; | |||||
| // Use for app only | |||||
| private List<TBActivityDTO> activities; | |||||
| private Instant plantingDate; | |||||
| private Instant sowingDate; | |||||
| private Double seedIncubationTime; | |||||
| private Integer numberPlants; | |||||
| private Integer numberCurrentPlants; | |||||
| private Instant endOfFarmingDate; | |||||
| private TBAddressDTO tbAddressDTO; | |||||
| public TBCropDTO getTbCropDTO() { | |||||
| return tbCropDTO; | |||||
| } | |||||
| public void setTbCropDTO(TBCropDTO tbCropDTO) { | |||||
| this.tbCropDTO = tbCropDTO; | |||||
| } | |||||
| public Instant getSowingDate() { | |||||
| return sowingDate; | |||||
| } | |||||
| public void setSowingDate(Instant sowingDate) { | |||||
| this.sowingDate = sowingDate; | |||||
| } | |||||
| public Instant getPlantingDate() { | |||||
| return plantingDate; | |||||
| } | |||||
| public void setPlantingDate(Instant plantingDate) { | |||||
| this.plantingDate = plantingDate; | |||||
| } | |||||
| public Double getSeedIncubationTime() { | |||||
| return seedIncubationTime; | |||||
| } | |||||
| public void setSeedIncubationTime(Double seedIncubationTime) { | |||||
| this.seedIncubationTime = seedIncubationTime; | |||||
| } | |||||
| public Integer getNumberPlants() { | |||||
| return numberPlants; | |||||
| } | |||||
| public void setNumberPlants(Integer numberPlants) { | |||||
| this.numberPlants = numberPlants; | |||||
| } | |||||
| public Integer getNumberCurrentPlants() { | |||||
| return numberCurrentPlants; | |||||
| } | |||||
| public void setNumberCurrentPlants(Integer numberCurrentPlants) { | |||||
| this.numberCurrentPlants = numberCurrentPlants; | |||||
| } | |||||
| public Instant getEndOfFarmingDate() { | |||||
| return endOfFarmingDate; | |||||
| } | |||||
| public void setEndOfFarmingDate(Instant endOfFarmingDate) { | |||||
| this.endOfFarmingDate = endOfFarmingDate; | |||||
| } | |||||
| public List<TBActivityDTO> getActivities() { | |||||
| return activities; | |||||
| } | |||||
| public void setActivities(List<TBActivityDTO> activities) { | |||||
| this.activities = activities; | |||||
| } | |||||
| public ActivityTimelineDTO getActivityTimeline() { | |||||
| return activityTimeline; | |||||
| } | |||||
| public void setActivityTimeline(ActivityTimelineDTO activityTimeline) { | |||||
| this.activityTimeline = activityTimeline; | |||||
| } | |||||
| public TBAddressDTO getTbAddressDTO() { | |||||
| return tbAddressDTO; | |||||
| } | |||||
| public void setTbAddressDTO(TBAddressDTO tbAddressDTO) { | |||||
| this.tbAddressDTO = tbAddressDTO; | |||||
| } | |||||
| } |
| import java.util.Optional; | import java.util.Optional; | ||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
| import static vn.azteam.tpf.Constants.Constants.*; | |||||
| /** | /** | ||||
| * Service Implementation for managing TBCodeDetails. | * Service Implementation for managing TBCodeDetails. | ||||
| */ | */ | ||||
| private final UserService userService; | private final UserService userService; | ||||
| private final TBObjectUpdateService tbObjectUpdateService; | |||||
| private final UserRoleUtil userRoleUtil; | private final UserRoleUtil userRoleUtil; | ||||
| private final TBActivityQueryService tBActivityQueryService; | private final TBActivityQueryService tBActivityQueryService; | ||||
| TBCodeDetailsMapper tBCodeDetailsMapper, | TBCodeDetailsMapper tBCodeDetailsMapper, | ||||
| TBDetailUserRepository tBDetailUserRepository, | TBDetailUserRepository tBDetailUserRepository, | ||||
| UserService userService, | UserService userService, | ||||
| TBObjectUpdateService tbObjectUpdateService, | |||||
| UserRoleUtil userRoleUtil, | UserRoleUtil userRoleUtil, | ||||
| TBActivityQueryService tBActivityQueryService, | |||||
| TBCropService tbCropService, | |||||
| TBCropQueryService tBCropQueryService, TBCropMapper tbCropMapper, | |||||
| TBActivityQueryService tBActivityQueryService, TBCropService tbCropService, | |||||
| TBCropQueryService tBCropQueryService, | |||||
| TBCropMapper tbCropMapper, | |||||
| TBCodeDetailsSearchRepository tBCodeDetailsSearchRepository) { | TBCodeDetailsSearchRepository tBCodeDetailsSearchRepository) { | ||||
| this.tbCodeDetailsRepository = tbCodeDetailsRepository; | this.tbCodeDetailsRepository = tbCodeDetailsRepository; | ||||
| this.tBCodeDetailsMapper = tBCodeDetailsMapper; | this.tBCodeDetailsMapper = tBCodeDetailsMapper; | ||||
| this.tBDetailUserRepository = tBDetailUserRepository; | this.tBDetailUserRepository = tBDetailUserRepository; | ||||
| this.userService = userService; | this.userService = userService; | ||||
| this.tbObjectUpdateService = tbObjectUpdateService; | |||||
| this.userRoleUtil = userRoleUtil; | this.userRoleUtil = userRoleUtil; | ||||
| this.tBActivityQueryService = tBActivityQueryService; | this.tBActivityQueryService = tBActivityQueryService; | ||||
| this.tbCropService = tbCropService; | this.tbCropService = tbCropService; | ||||
| } | } | ||||
| @Transactional | @Transactional | ||||
| public TBCropDetailDTOV2 updateNumberScan(String code) throws BadRequestAlertException { | |||||
| public TBCodeDetailsAndActivityDTO updateNumberScan(String code) throws BadRequestAlertException { | |||||
| Optional<TBCodeDetails> tbCodeDetailsOptional = tbCodeDetailsRepository.findByCode(code); | Optional<TBCodeDetails> tbCodeDetailsOptional = tbCodeDetailsRepository.findByCode(code); | ||||
| if (tbCodeDetailsOptional.isPresent()) { | if (tbCodeDetailsOptional.isPresent()) { | ||||
| TBCodeDetails tbCodeDetails = tbCodeDetailsOptional.get(); | TBCodeDetails tbCodeDetails = tbCodeDetailsOptional.get(); | ||||
| Integer numberScan = tbCodeDetails.getNumberScan(); | Integer numberScan = tbCodeDetails.getNumberScan(); | ||||
| tbCodeDetails.setNumberScan(numberScan.equals(0) ? 1 : numberScan + 1); | tbCodeDetails.setNumberScan(numberScan.equals(0) ? 1 : numberScan + 1); | ||||
| tbCodeDetails.setLastUpdatedDate(Instant.now()); | tbCodeDetails.setLastUpdatedDate(Instant.now()); | ||||
| tbCodeDetailsRepository.save(tbCodeDetails); | |||||
| tbCodeDetails = tbCodeDetailsRepository.save(tbCodeDetails); | |||||
| log.debug("update number scan find by criteria code : {}", code); | log.debug("update number scan find by criteria code : {}", code); | ||||
| return this.getCodeDetailDTOResponseEntity(tbCropMapper.toDto(tbCodeDetailsOptional.get().getTbCode().getTbCrop()), Pageable.unpaged(), true); | |||||
| TBCodeDetailsAndActivityDTO tbCodeDetailsAndActivityDTO = this.getCodeDetailDTOResponseEntity(tbCropMapper.toDto(tbCodeDetailsOptional.get().getTbCode().getTbCrop()), Pageable.unpaged(), true); | |||||
| tbCodeDetailsAndActivityDTO.setTbCodeDetailsDTO(tBCodeDetailsMapper.toDto(tbCodeDetails)); | |||||
| tbCodeDetailsAndActivityDTO.setDescription(tbCode.getDescription()); | |||||
| return tbCodeDetailsAndActivityDTO; | |||||
| } else { | } else { | ||||
| throw new BadRequestAlertException("Scan code not found", "tb code details with code:", code); | throw new BadRequestAlertException("Scan code not found", "tb code details with code:", code); | ||||
| } | } | ||||
| } | } | ||||
| private TBCropDetailDTOV2 getCodeDetailDTOResponseEntity( | |||||
| private TBCodeDetailsAndActivityDTO getCodeDetailDTOResponseEntity( | |||||
| TBCropDTO tBCropDTO, | TBCropDTO tBCropDTO, | ||||
| Pageable pageable, | Pageable pageable, | ||||
| Boolean isRequestedFromWeb) { | Boolean isRequestedFromWeb) { | ||||
| throw new BadRequestAlertException("1018", ENTITY_NAME, "1018"); | throw new BadRequestAlertException("1018", ENTITY_NAME, "1018"); | ||||
| } | } | ||||
| Optional<UserDTO> currentUser = userService.getCurrentUserDTO(); | Optional<UserDTO> currentUser = userService.getCurrentUserDTO(); | ||||
| TBCropDetailDTOV2 tbCropDetailDTO = new TBCropDetailDTOV2(); | |||||
| tbCropDetailDTO.setTbCropDTO(tBCropDTO); | |||||
| TBCodeDetailsAndActivityDTO tbCodeDetailsAndActivityDTO = new TBCodeDetailsAndActivityDTO(); | |||||
| tbCodeDetailsAndActivityDTO.setTbCropDTO(tBCropDTO); | |||||
| // Get list of activity | // Get list of activity | ||||
| TBActivityCriteria criteria = new TBActivityCriteria(); | TBActivityCriteria criteria = new TBActivityCriteria(); | ||||
| LongFilter cropFilter = new LongFilter(); | LongFilter cropFilter = new LongFilter(); | ||||
| cropFilter.setEquals(tBCropDTO.getId()); | cropFilter.setEquals(tBCropDTO.getId()); | ||||
| criteria.setCropId(cropFilter); | criteria.setCropId(cropFilter); | ||||
| // List<TBActivityTypeDTO> activityTypeDTOS = tBActivityTypeQueryService.findByAfterHarvestTrue(); | |||||
| // List<Long> ids = activityTypeDTOS.stream().map(TBActivityTypeDTO::getId).collect(Collectors.toList()) | |||||
| List<TBActivityDTO> allActivities = tBActivityQueryService.findByCriteria(criteria).stream() | List<TBActivityDTO> allActivities = tBActivityQueryService.findByCriteria(criteria).stream() | ||||
| .sorted(Comparator.comparing( | .sorted(Comparator.comparing( | ||||
| TBActivityDTO::getExecuteDate, | TBActivityDTO::getExecuteDate, | ||||
| Comparator.nullsLast(Comparator.naturalOrder())).reversed()) | Comparator.nullsLast(Comparator.naturalOrder())).reversed()) | ||||
| .collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
| if (!allActivities.isEmpty()) { | |||||
| allActivities = allActivities.stream() | |||||
| .filter(tbActivityDTO -> tbActivityDTO.getAfterHarvest().equals(Boolean.TRUE)) | |||||
| .collect(Collectors.toList()); | |||||
| } | |||||
| //remove env activities automatically | //remove env activities automatically | ||||
| allActivities | |||||
| .removeIf(activity -> ACTIVE_TYPE_UPDATE_ENV.equals(activity.getActivityTypeName()) | |||||
| && activity.getCreatedById() == null); | |||||
| // allActivities | |||||
| // .removeIf(activity -> ACTIVE_TYPE_UPDATE_ENV.equals(activity.getActivityTypeName()) | |||||
| // && activity.getCreatedById() == null); | |||||
| // allActivities.removeIf(activity -> ACTIVE_TYPE_UPDATE_ENV.equals(activity.getActivityTypeId()) | |||||
| // && activity.getCreatedById() == null) | |||||
| // Lo Uom | // Lo Uom | ||||
| if (tBCropDTO.getTbCropTypeId() == 1) { | |||||
| // Get sowing Date | |||||
| TBActivityDTO nurseryActivity = allActivities.stream() | |||||
| .sorted(Comparator.comparing( | |||||
| TBActivityDTO::getExecuteDate, | |||||
| Comparator.nullsLast(Comparator.naturalOrder()))) | |||||
| .filter(activity -> ACTIVE_TYPE_NURSERY.equals(activity.getActivityTypeName())) | |||||
| .findAny() | |||||
| .orElse(null); | |||||
| if (nurseryActivity != null) { | |||||
| tbCropDetailDTO.setSowingDate(nurseryActivity.getExecuteDate()); | |||||
| List<TBObjectUpdateDTO> tbObjectUpdateDTOs = tbObjectUpdateService.findByTBActivityId(nurseryActivity.getId(), | |||||
| Pageable.unpaged()); | |||||
| if (tbObjectUpdateDTOs != null && tbObjectUpdateDTOs.size() > 0) { | |||||
| tbObjectUpdateDTOs.forEach(item -> { | |||||
| if (item.getTbObjectParameterDTO().getName().equals(THOI_GIAN_NGAM_HAT)) { | |||||
| item.setIndex(item.getIndex() != null && !item.getIndex().isEmpty() ? item.getIndex() : "0"); | |||||
| tbCropDetailDTO.setSeedIncubationTime(Double.valueOf(item.getIndex())); | |||||
| } | |||||
| }); | |||||
| } | |||||
| } | |||||
| } | |||||
| // if (tBCropDTO.getTbCropTypeId() == 1) { | |||||
| // // Get sowing Date | |||||
| // TBActivityDTO nurseryActivity = allActivities.stream() | |||||
| // .sorted(Comparator.comparing( | |||||
| // TBActivityDTO::getExecuteDate, | |||||
| // Comparator.nullsLast(Comparator.naturalOrder()))) | |||||
| // .filter(activity -> ACTIVE_TYPE_NURSERY.equals(activity.getActivityTypeName())) | |||||
| // .findAny() | |||||
| // .orElse(null); | |||||
| // if (nurseryActivity != null) { | |||||
| // tbCropDetailDTO.setSowingDate(nurseryActivity.getExecuteDate()); | |||||
| // List<TBObjectUpdateDTO> tbObjectUpdateDTOs = tbObjectUpdateService.findByTBActivityId(nurseryActivity.getId(), | |||||
| // Pageable.unpaged()); | |||||
| // if (tbObjectUpdateDTOs != null && tbObjectUpdateDTOs.size() > 0) { | |||||
| // tbObjectUpdateDTOs.forEach(item -> { | |||||
| // if (item.getTbObjectParameterDTO().getName().equals(THOI_GIAN_NGAM_HAT)) { | |||||
| // item.setIndex(item.getIndex() != null && !item.getIndex().isEmpty() ? item.getIndex() : "0"); | |||||
| // tbCropDetailDTO.setSeedIncubationTime(Double.valueOf(item.getIndex())); | |||||
| // } | |||||
| // }); | |||||
| // } | |||||
| // } | |||||
| // } | |||||
| //Lo Trong | //Lo Trong | ||||
| if (tBCropDTO.getTbCropTypeId() == 2) { | |||||
| // Get planting Date | |||||
| TBActivityDTO plantingActivity = allActivities.stream() | |||||
| .sorted(Comparator.comparing( | |||||
| TBActivityDTO::getExecuteDate, | |||||
| Comparator.nullsLast(Comparator.naturalOrder()))) | |||||
| .filter(activity -> ACTIVE_TYPE_PLANTING.equals(activity.getActivityTypeName())) | |||||
| .findAny() | |||||
| .orElse(null); | |||||
| tbCropDetailDTO.setPlantingDate(plantingActivity != null ? plantingActivity.getExecuteDate() : null); | |||||
| List<Long> listActivities = allActivities.stream().map(TBActivityDTO::getId).collect(Collectors.toList()); | |||||
| List<TBObjectUpdateDTO> tbObjectUpdateDTOs = tbObjectUpdateService.findByInListTBActivityId(listActivities, Pageable.unpaged()); | |||||
| if (tbObjectUpdateDTOs != null && tbObjectUpdateDTOs.size() > 0) { | |||||
| tbObjectUpdateDTOs.forEach(item -> { | |||||
| if (item.getTbObjectParameterDTO().getName().equals(SO_LUONG_CAY_TRONG)) { | |||||
| item.setIndex(item.getIndex() != null && !item.getIndex().isEmpty() ? item.getIndex() : "0"); | |||||
| tbCropDetailDTO.setNumberPlants(Integer.parseInt(item.getIndex().replaceAll("[^0-9]", ""))); | |||||
| tbCropDetailDTO.setNumberCurrentPlants(Integer.parseInt(item.getIndex().replaceAll("[^0-9]", ""))); | |||||
| } | |||||
| if (item.getTbObjectParameterDTO().getName().equals(SO_LUONG_LOAI_BO)) { | |||||
| item.setIndex(item.getIndex() != null && !item.getIndex().isEmpty() ? item.getIndex() : "0"); | |||||
| Integer currentNumberPlants = tbCropDetailDTO.getNumberPlants() - Integer.parseInt(item.getIndex().replaceAll("[^0-9]", "")); | |||||
| tbCropDetailDTO.setNumberCurrentPlants(currentNumberPlants > 0 ? currentNumberPlants : 0); | |||||
| } | |||||
| }); | |||||
| } | |||||
| } | |||||
| // if (tBCropDTO.getTbCropTypeId() == 2) { | |||||
| // // Get planting Date | |||||
| // TBActivityDTO plantingActivity = allActivities.stream() | |||||
| // .sorted(Comparator.comparing( | |||||
| // TBActivityDTO::getExecuteDate, | |||||
| // Comparator.nullsLast(Comparator.naturalOrder()))) | |||||
| // .filter(activity -> ACTIVE_TYPE_PLANTING.equals(activity.getActivityTypeName())) | |||||
| // .findAny() | |||||
| // .orElse(null); | |||||
| // | |||||
| // tbCropDetailDTO.setPlantingDate(plantingActivity != null ? plantingActivity.getExecuteDate() : null); | |||||
| // List<Long> listActivities = allActivities.stream().map(TBActivityDTO::getId).collect(Collectors.toList()); | |||||
| // List<TBObjectUpdateDTO> tbObjectUpdateDTOs = tbObjectUpdateService.findByInListTBActivityId(listActivities, Pageable.unpaged()); | |||||
| // | |||||
| // if (tbObjectUpdateDTOs != null && tbObjectUpdateDTOs.size() > 0) { | |||||
| // tbObjectUpdateDTOs.forEach(item -> { | |||||
| // if (item.getTbObjectParameterDTO().getName().equals(SO_LUONG_CAY_TRONG)) { | |||||
| // item.setIndex(item.getIndex() != null && !item.getIndex().isEmpty() ? item.getIndex() : "0"); | |||||
| // tbCropDetailDTO.setNumberPlants(Integer.parseInt(item.getIndex().replaceAll("[^0-9]", ""))); | |||||
| // tbCropDetailDTO.setNumberCurrentPlants(Integer.parseInt(item.getIndex().replaceAll("[^0-9]", ""))); | |||||
| // } | |||||
| // if (item.getTbObjectParameterDTO().getName().equals(SO_LUONG_LOAI_BO)) { | |||||
| // item.setIndex(item.getIndex() != null && !item.getIndex().isEmpty() ? item.getIndex() : "0"); | |||||
| // Integer currentNumberPlants = tbCropDetailDTO.getNumberPlants() - Integer.parseInt(item.getIndex().replaceAll("[^0-9]", "")); | |||||
| // tbCropDetailDTO.setNumberCurrentPlants(currentNumberPlants > 0 ? currentNumberPlants : 0); | |||||
| // } | |||||
| // }); | |||||
| // } | |||||
| // } | |||||
| //Filter assignment croptype by customer | //Filter assignment croptype by customer | ||||
| if (currentUser.get().getCustomerId() != null) { | if (currentUser.get().getCustomerId() != null) { | ||||
| if (isRequestedFromWeb) { | if (isRequestedFromWeb) { | ||||
| ActivityTimelineDTO activityTimeline = | ActivityTimelineDTO activityTimeline = | ||||
| tBCropQueryService.getActivityTimeline(tBCropDTO.getId(), allActivities, pageable); | tBCropQueryService.getActivityTimeline(tBCropDTO.getId(), allActivities, pageable); | ||||
| tbCropDetailDTO.setActivityTimeline(activityTimeline); | |||||
| tbCodeDetailsAndActivityDTO.setActivityTimeline(activityTimeline); | |||||
| } else { | } else { | ||||
| //allActivities = pageableUtil.changeTBActivityDTOToPageFromList(allActivities, pageable).getContent(); | //allActivities = pageableUtil.changeTBActivityDTOToPageFromList(allActivities, pageable).getContent(); | ||||
| tbCropDetailDTO.setActivities(allActivities); | |||||
| tbCodeDetailsAndActivityDTO.setActivities(allActivities); | |||||
| } | } | ||||
| TBActivityDTO endActivity = allActivities.stream() | |||||
| .sorted(Comparator.comparing( | |||||
| TBActivityDTO::getExecuteDate, | |||||
| Comparator.nullsLast(Comparator.naturalOrder())).reversed()) | |||||
| .filter(activity -> ACTIVE_TYPE_END.equals(activity.getActivityTypeName())) | |||||
| .findAny() | |||||
| .orElse(null); | |||||
| if (endActivity != null) { | |||||
| tbCropDetailDTO.setEndOfFarmingDate(endActivity.getExecuteDate()); | |||||
| } | |||||
| return tbCropDetailDTO; | |||||
| // TBActivityDTO endActivity = allActivities.stream() | |||||
| // .sorted(Comparator.comparing( | |||||
| // TBActivityDTO::getExecuteDate, | |||||
| // Comparator.nullsLast(Comparator.naturalOrder())).reversed()) | |||||
| // .filter(activity -> ACTIVE_TYPE_END.equals(activity.getActivityTypeName())) | |||||
| // .findAny() | |||||
| // .orElse(null); | |||||
| // if (endActivity != null) { | |||||
| // tbCropDetailDTO.setEndOfFarmingDate(endActivity.getExecuteDate()); | |||||
| // } | |||||
| return tbCodeDetailsAndActivityDTO; | |||||
| } | } | ||||
| @Override | @Override |
| import com.codahale.metrics.annotation.Timed; | import com.codahale.metrics.annotation.Timed; | ||||
| import io.github.jhipster.web.util.ResponseUtil; | import io.github.jhipster.web.util.ResponseUtil; | ||||
| import io.searchbox.strings.StringUtils; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.springframework.http.ResponseEntity; | import org.springframework.http.ResponseEntity; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| import vn.azteam.tpf.domain.TBCodeStatusEnum; | import vn.azteam.tpf.domain.TBCodeStatusEnum; | ||||
| import vn.azteam.tpf.service.TBCodeDetailsQueryService; | |||||
| import vn.azteam.tpf.service.TBCodeDetailsService; | import vn.azteam.tpf.service.TBCodeDetailsService; | ||||
| import vn.azteam.tpf.service.UserService; | import vn.azteam.tpf.service.UserService; | ||||
| import vn.azteam.tpf.service.dto.TBCodeDetailsAndActivityDTO; | |||||
| import vn.azteam.tpf.service.dto.TBCodeDetailsDTO; | import vn.azteam.tpf.service.dto.TBCodeDetailsDTO; | ||||
| import vn.azteam.tpf.service.dto.TBCropDetailDTOV2; | |||||
| import vn.azteam.tpf.service.dto.UserDTO; | import vn.azteam.tpf.service.dto.UserDTO; | ||||
| import vn.azteam.tpf.service.util.PageableUtil; | |||||
| import vn.azteam.tpf.service.util.UserRoleUtil; | |||||
| import vn.azteam.tpf.web.rest.errors.BadRequestAlertException; | import vn.azteam.tpf.web.rest.errors.BadRequestAlertException; | ||||
| import java.time.Instant; | import java.time.Instant; | ||||
| } | } | ||||
| @GetMapping("/tb-code-details/scan/{code}") | @GetMapping("/tb-code-details/scan/{code}") | ||||
| public ResponseEntity<TBCropDetailDTOV2> getTBCodeDetailsScan(@PathVariable String code) { | |||||
| public ResponseEntity<TBCodeDetailsAndActivityDTO> getTBCodeDetailsScan(@PathVariable String code) { | |||||
| if (StringUtils.isBlank(code)) { | if (StringUtils.isBlank(code)) { | ||||
| return (ResponseEntity<TBCropDetailDTOV2>) ResponseEntity.badRequest(); | |||||
| return (ResponseEntity<TBCodeDetailsAndActivityDTO>) ResponseEntity.badRequest(); | |||||
| } | } | ||||
| TBCropDetailDTOV2 tbCropDetailDTOV2ResponseEntity = tBCodeDetailsService.updateNumberScan(code); | |||||
| return ResponseEntity.ok().headers(null).body(tbCropDetailDTOV2ResponseEntity); | |||||
| TBCodeDetailsAndActivityDTO tbCodeDetailsAndActivityDTO = tBCodeDetailsService.updateNumberScan(code); | |||||
| return ResponseEntity.ok().headers(null).body(tbCodeDetailsAndActivityDTO); | |||||
| } | } | ||||
| import vn.azteam.tpf.web.rest.util.PaginationUtil; | import vn.azteam.tpf.web.rest.util.PaginationUtil; | ||||
| import vn.azteam.tpf.web.rest.util.RandomStringUtil; | import vn.azteam.tpf.web.rest.util.RandomStringUtil; | ||||
| import java.io.IOException; | |||||
| import java.net.URI; | import java.net.URI; | ||||
| import java.net.URISyntaxException; | import java.net.URISyntaxException; | ||||
| import java.time.Instant; | import java.time.Instant; | ||||
| private final TBCodeService tBCodeService; | private final TBCodeService tBCodeService; | ||||
| private final TBCodeDetailsService tbCodeDetailsService; | |||||
| private final TBActivityTypeService tBActivityTypeService; | |||||
| private final TBActivityService tBActivityService; | |||||
| private final TBCropService tBCropService; | private final TBCropService tBCropService; | ||||
| private final PageableUtil pageableUtil; | private final PageableUtil pageableUtil; | ||||
| public TBCodeResource(TBCodeService tBCodeService, TBCodeDetailsService tbCodeDetailsService, TBCropService tBCropService, UserService userService, TBCodeQueryService tBCodeQueryService, UserRoleUtil userRoleUtil, PageableUtil pageableUtil) { | |||||
| public TBCodeResource(TBCodeService tBCodeService, TBActivityTypeService tBActivityTypeService, | |||||
| TBActivityService tBActivityService, TBCropService tBCropService, UserService userService, | |||||
| TBCodeQueryService tBCodeQueryService, | |||||
| UserRoleUtil userRoleUtil, PageableUtil pageableUtil) { | |||||
| this.tBCodeService = tBCodeService; | this.tBCodeService = tBCodeService; | ||||
| this.tbCodeDetailsService = tbCodeDetailsService; | |||||
| this.tBActivityTypeService = tBActivityTypeService; | |||||
| this.tBActivityService = tBActivityService; | |||||
| this.tBCropService = tBCropService; | this.tBCropService = tBCropService; | ||||
| this.userService = userService; | this.userService = userService; | ||||
| this.tBCodeQueryService = tBCodeQueryService; | this.tBCodeQueryService = tBCodeQueryService; | ||||
| public ResponseEntity<TBCodeDTO> getTBCodes(@PathVariable Long id) { | public ResponseEntity<TBCodeDTO> getTBCodes(@PathVariable Long id) { | ||||
| log.debug("REST request to get TBCode : {}", id); | log.debug("REST request to get TBCode : {}", id); | ||||
| Optional<TBCodeDTO> tBCodeDTO = tBCodeService.findOne(id); | Optional<TBCodeDTO> tBCodeDTO = tBCodeService.findOne(id); | ||||
| // tra them thong tin hoat dong | |||||
| //@CUONGLT - Filter scope customer's data | //@CUONGLT - Filter scope customer's data | ||||
| // if (!userRoleUtil.currentUserHasPermissionByCropId(tBCodeDTO.get().getId())) { | // if (!userRoleUtil.currentUserHasPermissionByCropId(tBCodeDTO.get().getId())) { | ||||
| // throw new BadRequestAlertException("1018", ENTITY_NAME, "1018"); | // throw new BadRequestAlertException("1018", ENTITY_NAME, "1018"); | ||||
| return ResponseUtil.wrapOrNotFound(tBCodeDTO); | return ResponseUtil.wrapOrNotFound(tBCodeDTO); | ||||
| } | } | ||||
| // 1 api tạo hoạt động cho code | |||||
| @PostMapping("/tb-codes/create/activity") | |||||
| @Timed | |||||
| public ResponseEntity<TBActivityDTO> createActivityForTBCode(@RequestBody ActivityCodeCreationDTO | |||||
| activityCodeCreationDTO) throws IOException { | |||||
| log.debug("REST request to save TBActivityDTO : {}", activityCodeCreationDTO); | |||||
| //Set created by to current user login | |||||
| UserDTO currentUser = userService.getCurrentUserDTO().get(); | |||||
| if (activityCodeCreationDTO.getTbCropId() == null) { | |||||
| throw new BadRequestAlertException("1047", ENTITY_NAME, "1047"); | |||||
| } | |||||
| if (activityCodeCreationDTO.getActivityTypeId() == null) { | |||||
| throw new BadRequestAlertException("1047", ENTITY_NAME, "1047"); | |||||
| } | |||||
| if (activityCodeCreationDTO.getExecuteDate() == null) { | |||||
| throw new BadRequestAlertException("1047", ENTITY_NAME, "1047"); | |||||
| } | |||||
| Optional<TBCropDTO> tBCropDTO = tBCropService.findOne(activityCodeCreationDTO.getTbCropId()); | |||||
| if (!tBCropDTO.isPresent()) { | |||||
| throw new BadRequestAlertException("1019", ENTITY_NAME, "1019"); | |||||
| } | |||||
| Optional<TBActivityTypeDTO> tbActivityTypeDTO = tBActivityTypeService.findOne(activityCodeCreationDTO.getActivityTypeId()); | |||||
| if (!tbActivityTypeDTO.isPresent()) { | |||||
| throw new BadRequestAlertException("1019", ENTITY_NAME, "1019"); | |||||
| } | |||||
| TBActivityDTO activityDTO = new TBActivityDTO(); | |||||
| activityDTO.setCreatedById(currentUser.getId()); | |||||
| activityDTO.setActivityTypeId(activityCodeCreationDTO.getActivityTypeId()); | |||||
| activityDTO.setDescription(activityCodeCreationDTO.getDescription()); | |||||
| activityDTO.setExecuteDate(activityCodeCreationDTO.getExecuteDate()); | |||||
| activityDTO.setCropId(activityCodeCreationDTO.getTbCropId()); | |||||
| activityDTO.setCreatedDate(Instant.now()); | |||||
| TBActivityDTO result = tBActivityService.save(activityDTO); | |||||
| return ResponseEntity.badRequest() | |||||
| .headers(HeaderUtil.createEntityUpdateAlert("TBActivity", "Created activity success!")) | |||||
| .body(result); | |||||
| } | |||||
| /** | /** | ||||
| * Add or delete crop's person in charges | * Add or delete crop's person in charges | ||||
| * | * |