Get total spend shopee

mail@pastecode.io avatar
unknown
javascript
a year ago
5.1 kB
1
Indexable
Never
async function getOrders(offset, limit) {
  try {
    const url = `https://shopee.vn/api/v4/order/get_all_order_and_checkout_list?limit=${limit}&offset=${offset}`;
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`Request failed with status ${response.status}`);
    }
    const data = await response.json();
    const orderData = data?.data?.order_data || [];
    return orderData.details_list || [];
  } catch (error) {
    console.error('Error in getOrders:', error);
    return [];
  }
}

const listTypeMapping = {
  3: 'Hoàn thành',
  4: 'Đã hủy',
  7: 'Vận chuyển',
  // Add other mappings here
};

function mapListType(listType) {
  return listTypeMapping[listType] || 'Không rõ';
}

async function getAllOrders() {
  const limit = 20;
  let offset = 0;
  let allOrders = [];
  let sum = 0; // Initialize the sum variable
  let count = 0;
  let order = 0;
  let tbody = '';

  while (true) {
    const data = await getOrders(offset, limit);
    if (data.length === 0) break;

    for (const item of data) {
      order++;
      const cTime = item?.shipping?.tracking_info?.ctime;
      const deliveredTime = cTime ? new Date(cTime * 1000).toLocaleDateString('vi-VN') : '';
      const infoCard = item.info_card;
      const listType = item.list_type;

      const strListType = mapListType(listType);

      const productCount = infoCard.product_count;
      let subTotal = listType !== 4 && listType !== 12 ? infoCard.subtotal / 1e5 : 0;
      count += productCount;
      const orderCard = infoCard.order_list_cards[0];
      const shopName = `${orderCard.shop_info.username} - ${orderCard.shop_info.shop_name}`;
      const products = orderCard.product_info.item_groups;
      const productSummary = products
        .map((product) =>
          product.items
            .map(
              (item) =>
                `${item.name} -- amount: ${item.amount} -- price: ${new Intl.NumberFormat().format(item.item_price)}`,
            )
            .join(', ')
        )
        .join('; ');
      const name = products[0].items[0].name;

      subTotalNative = new Intl.NumberFormat().format(subTotal); // Removed `let` declaration

      // Add the subtotal to the sum
      sum += subTotal;

      const row = [
        order,
        name,
        productCount,
        subTotalNative,
        strListType,
        shopName,
        productSummary,
        deliveredTime,
      ];

      tbody += `<tr>${row.map((item) => `<td>${item}</td>`).join('')}</tr>`;
      allOrders.push(row.join('\t'));
    }

    console.log(`Collected: ${offset}`);
    offset += limit;
  }

  const thead = `
    <thead>
      <tr>
        <th>STT</th>
        <th>Tên chung</th>
        <th>Số lượng</th>
        <th>Tổng tiền (VNĐ)</th>
        <th>Trạng thái</th>
        <th>Tên shop</th>
        <th>Chi tiết</th>
        <th>Ngày giao</th>
      </tr>
    </thead>
  `;

  tbody = `<tbody>${tbody}</tbody>`;

  const totalRow = `
    <tfoot>
      <th></th>
      <th>Tổng cộng:</th>
      <th>${count}</th>
      <th>${new Intl.NumberFormat().format(sum)}</th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tfoot>
  `;

  const table = `
    <table id="myTable" class="display" style="width: 100%">
      ${thead}
      ${tbody}
      ${totalRow}
    </table>
  `;

  const htmlContent = `
    <!DOCTYPE html>
    <html>
    <head>
      <link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css" />
      <script src="https://code.jquery.com/jquery-3.7.0.js"></script>
      <script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
    </head>
    <body>
      ${table}
      <script>
        $(document).ready( function () {
          var table = $('#myTable').DataTable({
            searching: false,
            paging: false,
            info: false,
            bScrollInfinite: true,
            bScrollCollapse: true,
            sScrollY: "700px"
          });
        });
      </script>
    </body>
    </html>
  `;

  const blob = new Blob([htmlContent], { type: 'text/html' });
  const tempURL = URL.createObjectURL(blob);

  const link = document.createElement('a');
  link.id = 'link';
  link.href = tempURL;
  link.textContent = 'View Detail Shopee Report';

  link.addEventListener('click', async function (event) {
    event.preventDefault();
    const iframe = document.createElement('iframe');
    iframe.src = tempURL;
    iframe.style.width = '100%';
    iframe.style.height = '900px';
    document.body.appendChild(iframe);
    link.style.pointerEvents = 'none';
    link.hidden = true;
  });

  const output = `
    <h3>Click copy and paste to a blank excel file! </h3>
    <textarea id="textarea">${allOrders.join('\r\n')}</textarea><br>
    <button onclick="copy()">Copy</button>
  `;

  document.body.innerHTML = output;
  document.body.appendChild(link);
}

function copy() {
  const textarea = document.getElementById('textarea');
  textarea.select();
  document.execCommand('copy');
}

getAllOrders();