Gia han hop dong
=============
> config precondition init api
```sql
INSERT INTO jupviecnoibo.`system` (name, value) VALUES ('pre-condition-extend-contract-config', '{
"isNeedConfirm": true,
"messageConfirm": "Nếu hài lòng nhân viên đang làm, bạn có thể tiếp tục chọn nhân viên này đến làm nhà bạn.",
"maxSuggestionMaid": 2
}');
```
> added table
| Tabe | Description |
| -------- | -------- |
| contract_pre_order | lưu lại thông tin đặt dịch vụ của khách hàng cho hợp đồng |
| contract_period_info | Thông tin cơ bạn của hợp đồng định kỳ |
| contract_period_extend_history | lịch sử gia hạn hợp đồng |
> Thông tin các Bảng được thêm
> contract_period_info
| Column | Comment |
| -------- | -------- |
| contract_id | Mã hợp đồng định kỳ |
| from_date | Thời gian bắt đầu. thời gian này sẽ được tính bởi hợp của các hợp đồng gia hạn của hợp đồng |
| to_date | Thời gian kết thúc. thời gian này sẽ được tính bởi hợp của các hợp đồng gia hạn của hợp đồng |
| customer_id | khách hàng |
| address_id | địa chỉ |
| is_extended_contract | hợp đồng gia hạn không |
> contract_period_extend_history
| Column | Comment |
| -------- | -------- |
| origin_contract_id | hợp đồng gốc |
| extended_contract_id | hợp đồng extend |
> contract_pre_order
| Column | Comment |
| -------- | -------- |
| contract_id | Mã hợp đồng |
| maid_ids | Danh sách yêu cầu nhân viên |
### Define contract period
---------
### Migrate data
- Đã tạo function migrate data trên customer service.
- Sẽ tính toán lại để migrate data cho toàn bộ khách hàng.
```java=
@Override
public void migrateContractPeriod(int customerId) {
List<Contracts> contractsList = contractsRepository.findAllByCustomerId(customerId);
for (Contracts c : contractsList) {
if(c.getProductPackageId() != Constants.CONTRACT_PRODUCT_PACKAGE_PERIOD) continue;
Optional<ContractPeriodInfo> contractPeriodInfoOptional = contractPeriodInfoRepository.findByContractId(c.getId());
if(!contractPeriodInfoOptional.isPresent()) {
log.info("migrate contract {}", c.getId());
ContractPeriodInfo contractPeriodInfo = new ContractPeriodInfo()
.contractId(c.getId())
.fromDate(c.getFromDate())
.toDate(c.getToDate())
.createdBy(Constants.SYSTEM_CREATOR)
.lastModifiedBy(Constants.SYSTEM_CREATOR)
.customerId(c.getCustomerId())
.addressId(c.getAddressId())
.isExtendedContract(c.getExtendFromContractId() != 0);
contractPeriodInfoRepository.save(contractPeriodInfo);
ContractPeriodExtendHistory contractPeriodExtendHistory = new ContractPeriodExtendHistory()
.originContractId(c.getExtendFromContractId() != 0 ? c.getExtendFromContractId() : c.getId())
.extendedContractId(c.getId())
.createdBy(Constants.SYSTEM_CREATOR)
.lastModifiedBy(Constants.SYSTEM_CREATOR);
contractPeriodExtendHistoryRepository.save(contractPeriodExtendHistory);
if(c.getExtendFromContractId() != 0) {
Optional<ContractPeriodInfo> oContractOptional = contractPeriodInfoRepository.findByContractId(c.getExtendFromContractId());
if(oContractOptional.isPresent()) {
ContractPeriodInfo oContractPeriodInfo = oContractOptional.get();
oContractPeriodInfo.setToDate(oContractPeriodInfo.getToDate() > contractPeriodInfo.getToDate() ? oContractPeriodInfo.getToDate() : contractPeriodInfo.getToDate());
contractPeriodInfoRepository.save(oContractPeriodInfo);
}
}
}
}
}
```
### Deploy
1. deploy jv_customer_svc: branch feature/extend_contract_phase2
2. deploy jv_contract_svc: branch feature/extend_contract_phase2
3. deploy jv_customer_svc: branch hotfix/add_rule_item_extend_contract
4. call api: /migrate-period-contract migrate all data.