|
|
|
@ -2,7 +2,7 @@ import { flush, groupBy, isEmpty, isNotEmpty, pick, unique, uniqWith } from '@/u
|
|
|
|
|
import dayjs from 'dayjs';
|
|
|
|
|
import { formatGroupSize } from './useProductsSets';
|
|
|
|
|
// Shoulder Season 平季; peak season 旺季
|
|
|
|
|
const isFullYearOrLonger = (year, startDate, endDate) => {
|
|
|
|
|
export const isFullYearOrLonger = (year, startDate, endDate) => {
|
|
|
|
|
// Parse the dates
|
|
|
|
|
const start = dayjs(startDate, 'YYYY-MM-DD');
|
|
|
|
|
const end = dayjs(endDate, 'YYYY-MM-DD');
|
|
|
|
@ -74,6 +74,7 @@ export const chunkBy = (use_year, dataList = [], by = []) => {
|
|
|
|
|
return aq;
|
|
|
|
|
}, {});
|
|
|
|
|
|
|
|
|
|
// 补全产品旺季的人等分组 (当旺季和平季的人等不完全一致时)
|
|
|
|
|
for (const WPI in PGroupSizeSS) {
|
|
|
|
|
if (Object.prototype.hasOwnProperty.call(PGroupSizeSS, WPI)) {
|
|
|
|
|
const element = PGroupSizeSS[WPI];
|
|
|
|
@ -168,11 +169,12 @@ export const chunkBy = (use_year, dataList = [], by = []) => {
|
|
|
|
|
const rowsByDate = groupBy(_sizeRows, qi => `${qi.use_dates_start}~${qi.use_dates_end}`);
|
|
|
|
|
const _rowsFromDate = Object.keys(rowsByDate).reduce((accDate, dateKeys) => {
|
|
|
|
|
const _dateRows = rowsByDate[dateKeys];
|
|
|
|
|
const rowKey = _dateRows.map(e => e.id).join(',');
|
|
|
|
|
const keepCol = pick(_dateRows[0], ['WPI_SN', 'WPP_VEI_SN', 'currency', 'unit_id', 'unit_name', 'use_dates_start', 'use_dates_end', 'weekdays', 'quote_season']);
|
|
|
|
|
const _colFromDateRow = _dateRows.reduce((accCols, rowp) => {
|
|
|
|
|
// const _colRow = pick(rowp, ['currency', 'unit_id', 'unit_name', 'use_dates_start', 'use_dates_end', 'weekdays', 'child_cost', 'adult_cost']);
|
|
|
|
|
return { ...accCols, [rowp.quote_col_key]: rowp };
|
|
|
|
|
}, {...keepCol, originRows: _dateRows });
|
|
|
|
|
}, {...keepCol, originRows: _dateRows, rowKey });
|
|
|
|
|
accDate.push(_colFromDateRow);
|
|
|
|
|
return accDate;
|
|
|
|
|
}, []);
|
|
|
|
@ -211,7 +213,7 @@ export const chunkBy = (use_year, dataList = [], by = []) => {
|
|
|
|
|
* 按人等拆分表格
|
|
|
|
|
* @use D J B R 8
|
|
|
|
|
*/
|
|
|
|
|
const splitTable_SizeSets = (chunkData) => {
|
|
|
|
|
export const splitTable_SizeSets = (chunkData) => {
|
|
|
|
|
const { SSRange, PSRange, SSsizeSetKey, SSsizeSetsMap, chunk } = chunkData;
|
|
|
|
|
const bySizeSetKey = groupBy(chunk, 'sizeSetsSS'); // next: city
|
|
|
|
|
// agencyProducts.J.
|
|
|
|
@ -241,7 +243,7 @@ const splitTable_SizeSets = (chunkData) => {
|
|
|
|
|
* 按季度分列 [平季, 旺季]
|
|
|
|
|
* @use Q 7 6
|
|
|
|
|
*/
|
|
|
|
|
const splitTable_Season = (chunkData) => {
|
|
|
|
|
export const splitTable_Season = (chunkData) => {
|
|
|
|
|
const { SSRange, PSRange, SSsizeSetKey, SSsizeSetsMap, chunk } = chunkData;
|
|
|
|
|
// console.log(chunkData);
|
|
|
|
|
const tablesQuote = chunk.map((pitem) => {
|
|
|
|
@ -256,6 +258,7 @@ const splitTable_Season = (chunkData) => {
|
|
|
|
|
const valRow = pick(valRows[0], ['adult_cost', 'child_cost', 'currency', 'unit_id', 'unit_name', 'group_size_min', 'group_size_max']);
|
|
|
|
|
// valRow.dates = valRows.map((v) => pick(v, ['id', 'use_dates_end', 'use_dates_start']));
|
|
|
|
|
valRow.rows = valRows;
|
|
|
|
|
valRow.rowKey = valRows.map(v => v.id).join(',');
|
|
|
|
|
accv.push(valRow);
|
|
|
|
|
return accv;
|
|
|
|
|
}, []);
|
|
|
|
@ -263,22 +266,24 @@ const splitTable_Season = (chunkData) => {
|
|
|
|
|
return { ...accp, [_s]: valUnderSeason };
|
|
|
|
|
}, {});
|
|
|
|
|
// console.log('---- rowSeason', rowSeason);
|
|
|
|
|
return { info: pitem.info, ...rowSeason };
|
|
|
|
|
return { info: pitem.info, ...rowSeason, rowKey: pitem.info.id };
|
|
|
|
|
});
|
|
|
|
|
// console.log('---- tablesQuote', tablesQuote);
|
|
|
|
|
return tablesQuote;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_D = (use_year, dataSource) => {
|
|
|
|
|
export const splitTable_D = (use_year, dataSource, retTableOnly = true) => {
|
|
|
|
|
const chunked = chunkBy(use_year, dataSource);
|
|
|
|
|
// console.log(chunked);
|
|
|
|
|
return addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
const tables = addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
return retTableOnly ? tables : { ...chunked, tables };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_J = (use_year, dataSource) => {
|
|
|
|
|
export const splitTable_J = (use_year, dataSource, retTableOnly = true) => {
|
|
|
|
|
const chunked = chunkBy(use_year, dataSource);
|
|
|
|
|
// console.log(chunked);
|
|
|
|
|
return addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
const tables = addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
return retTableOnly ? tables : { ...chunked, tables };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_Q = (use_year, dataSource) => {
|
|
|
|
@ -291,10 +296,11 @@ export const splitTable_7 = (use_year, dataSource) => {
|
|
|
|
|
return addCityRow4Season(splitTable_Season(chunked));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_R = (use_year, dataSource) => {
|
|
|
|
|
export const splitTable_R = (use_year, dataSource, retTableOnly = true) => {
|
|
|
|
|
const chunked = chunkBy(use_year, dataSource);
|
|
|
|
|
// console.log(chunked);
|
|
|
|
|
return addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
const tables = addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
return retTableOnly ? tables : { ...chunked, tables };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_8 = (use_year, dataSource) => {
|
|
|
|
@ -303,22 +309,24 @@ export const splitTable_8 = (use_year, dataSource) => {
|
|
|
|
|
return addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_6 = (use_year, dataSource) => {
|
|
|
|
|
export const splitTable_6 = (use_year, dataSource, retTableOnly = true) => {
|
|
|
|
|
const chunked = chunkBy(use_year, dataSource, ['quote_season']);
|
|
|
|
|
return (splitTable_Season(chunked));
|
|
|
|
|
const tables = splitTable_Season(chunked);
|
|
|
|
|
return retTableOnly ? tables : { ...chunked, tables };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const splitTable_B = (use_year, dataSource) => {
|
|
|
|
|
export const splitTable_B = (use_year, dataSource, retTableOnly = true) => {
|
|
|
|
|
const chunked = chunkBy(use_year, dataSource);
|
|
|
|
|
// console.log(chunked);
|
|
|
|
|
return addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
const tables = addCityRow4Split(splitTable_SizeSets(chunked));
|
|
|
|
|
return retTableOnly ? tables : { ...chunked, tables };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const addCityRow4Season = (table) => {
|
|
|
|
|
const byCity = groupBy(table, (ele) => `${ele.info.city_id}@${ele.info.city_name}`);
|
|
|
|
|
const withCityRow = Object.keys(byCity).reduce((acc, cityIdName) => {
|
|
|
|
|
const [cityId, cityName] = cityIdName.split('@');
|
|
|
|
|
acc.push({ info: { product_title: cityName, isCityRow: true,}, use_dates_end: '', use_dates_start: '', quote_season: 'SS', rowSpan: 1 });
|
|
|
|
|
acc.push({ info: { product_title: cityName, isCityRow: true,}, use_dates_end: '', use_dates_start: '', quote_season: 'SS', rowSpan: 1, rowKey: `c_${cityId}` });
|
|
|
|
|
return acc.concat(byCity[cityIdName]);
|
|
|
|
|
}, []);
|
|
|
|
|
return withCityRow;
|
|
|
|
|