Untitled

 avatar
unknown
plain_text
5 months ago
3.7 kB
5
Indexable
const setOfferVariant = ({
  calc,
  from,
  to,
  index,
  setValue,
  currentData,
}: {
  from: string | Date;
  to: string | Date;
  calc: ReturnType<typeof formulas.filterPriceList>;
  index: number;
  setValue: UseFormSetValue<Slice>;
  currentData: Slice['energyConsumptionPointsElectricity'][number];
}) => {
  const filteredPriceList = Array.isArray(calc) ? calc : null;

  if (!filteredPriceList) return;
  // TODO: czy code czy inny klucz
  const priceListName =
    filteredPriceList?.[index]?.selectedPriceList?.code ?? '';
  const product = filteredPriceList?.[index]?.selectedProduct ?? null;

  if (product === null) {
    setValue(
      `energyConsumptionPointsElectricity.${index}.values`,
      Array.from(
        {
          length:
            Math.abs(
              new Date(to).getFullYear() - new Date(from).getFullYear()
            ) + 1,
        },
        (_, i) => {
          return {
            year: new Date(from).getFullYear() + i,
            sellingPrice: 0,
            priceListNumber: '',
            priceFromPriceList: 0,
            marginMass: 0,
            tradingFee: 0,
            repurchasePrice: 0,
            purchasePriceFromInstallation: 0,
            gpPrice: 0,
            minMargin: 0,
            maxMargin: 0,
            isPriceListAvailable: false,
          };
        }
      )
    );
  }

  if (from && to && product) {
    setValue(
      `energyConsumptionPointsElectricity.${index}.values`,
      Array.from(
        {
          length:
            Math.abs(
              new Date(to).getFullYear() - new Date(from).getFullYear()
            ) + 1,
        },
        (_, i) => {
          const periods = product?.periods ?? [];
          let period;
          if (periods) {
            const startYear = dateFns.getYear(new Date(from));
            const endYear = dateFns.getYear(new Date(to));
            const isSameYear = startYear === endYear;
            const currentYear = new Date(from).getFullYear() + i;

            if (!isSameYear) {
              period = periods.find(
                (p) =>
                  currentYear >= new Date(p.start_date).getFullYear() &&
                  currentYear <= new Date(p.end_date).getFullYear() &&
                  new Date(p.start_date).getFullYear() !==
                    new Date(p.end_date).getFullYear()
              );

              if (!period) {
                period = periods.find(
                  (p) =>
                    new Date(p.start_date).getFullYear() === currentYear &&
                    new Date(p.end_date).getFullYear() === currentYear
                );
              }
            } else {
              period = periods.find(
                (p) =>
                  new Date(p.start_date).getFullYear() === currentYear &&
                  new Date(p.end_date).getFullYear() === currentYear
              );
            }
          }

          return {
            year: new Date(from).getFullYear() + i,
            sellingPrice: currentData?.values?.[i]?.sellingPrice ?? 0,
            priceListNumber: priceListName,
            priceFromPriceList: period?.price ?? 0,
            marginMass: 0,
            tradingFee: period?.trade_fee ?? 0,
            repurchasePrice: period?.repurchase ?? 0,
            purchasePriceFromInstallation: 0,
            gpPrice: period?.price_gp ?? 0,
            minMargin: period?.min_margin ?? 0,
            maxMargin: period?.max_margin ?? 0,
            isPriceListAvailable: !period ? false : true,
          };
        }
      )
    );
  }
};
Editor is loading...
Leave a Comment