---
# System prepended metadata

title: Gia han hop dong

---

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.

