1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[58143],{58143:(e,a,t)=>{t.d(a,{Gj:()=>K,OU:()=>A,aW:()=>C,cn:()=>R,downloadProductTemplate:()=>B,exportProductsToXlsx:()=>I,j1:()=>v,l8:()=>b,pB:()=>w,parseProductImport:()=>E,rw:()=>k,wH:()=>S});var r=t(39280),n=t.n(r),o=t(73200);let i=[{header:"Full Name",fieldKey:"name",required:!0,type:"string"},{header:"Personal Email",fieldKey:"personalEmail",required:!0,type:"email"},{header:"Business Email",fieldKey:"northstarEmail",type:"email"},{header:"Phone",fieldKey:"primaryPhone",type:"string"},{header:"Date Hired",fieldKey:"dateHired",type:"date"},{header:"Birthday",fieldKey:"birthday",type:"date"},{header:"Country",fieldKey:"country",type:"string"},{header:"City",fieldKey:"city",type:"string"},{header:"Address",fieldKey:"address",type:"string"},{header:"Contract Type",fieldKey:"contractType",type:"enum",enumValues:["full_time_salary","part_time_salary","hourly"]},{header:"Pay Rate ($)",fieldKey:"payRate",type:"number"},{header:"Hourly Rate ($)",fieldKey:"hourlyRate",type:"number"},{header:"Title",fieldKey:"title",type:"string"},{header:"Department",fieldKey:"department",type:"string"},{header:"Role",fieldKey:"role",type:"enum",enumValues:["admin","employee","pending"]},{header:"Contract URL",fieldKey:"contractUrl",type:"url"},{header:"Status",fieldKey:"status",type:"enum",enumValues:["Active","Inactive"]},{header:"Is Leader",fieldKey:"isPodLeader",type:"boolean"},{header:"Vacation Days Per Year",fieldKey:"vacationDaysPerYear",type:"number"},{header:"Vacation Days Per Year Left",fieldKey:"__computedVacationLeft",type:"number",readonly:!0},{header:"Has Bonus",fieldKey:"hasBonus",type:"boolean"}],d=[{header:"Name",fieldKey:"name",required:!0,type:"string"},{header:"Email",fieldKey:"email",required:!0,type:"email"},{header:"Phone",fieldKey:"phone",type:"string"},{header:"Address",fieldKey:"address",type:"string"},{header:"City",fieldKey:"city",type:"string"},{header:"Country",fieldKey:"country",type:"string"},{header:"Zip",fieldKey:"zip",type:"string"},{header:"Monthly Revenue",fieldKey:"revenue",type:"number"},{header:"Status",fieldKey:"status",type:"enum",enumValues:["Active","Inactive"]},{header:"Leader",fieldKey:"__leaderName",type:"string"},{header:"Start Date",fieldKey:"startDate",type:"date"},{header:"Collection Preference",fieldKey:"collectionPreference",type:"string"}],l=[{header:"Name",fieldKey:"name",required:!0,type:"string"},{header:"Contact Name",fieldKey:"contactName",type:"string"},{header:"Email",fieldKey:"email",type:"email"},{header:"Phone",fieldKey:"phone",type:"string"},{header:"Address",fieldKey:"address",type:"string"},{header:"City",fieldKey:"city",type:"string"},{header:"State",fieldKey:"state",type:"string"},{header:"Zip Code",fieldKey:"zipCode",type:"string"},{header:"Country",fieldKey:"country",type:"string"},{header:"Tax ID",fieldKey:"taxId",type:"string"},{header:"Website",fieldKey:"website",type:"url"},{header:"Notes",fieldKey:"notes",type:"string"},{header:"Payment Terms (days)",fieldKey:"paymentTerms",type:"number"},{header:"Preferred Payment",fieldKey:"preferredPaymentMethod",type:"enum",enumValues:["check","ach","wire","credit_card","cash"]},{header:"Status",fieldKey:"status",type:"enum",enumValues:["active","inactive"]},{header:"Category",fieldKey:"category",type:"string"},{header:"Account Number",fieldKey:"accountNumber",type:"string"},{header:"Bank Name",fieldKey:"bankName",type:"string"}],s=[{header:"Name",fieldKey:"name",required:!0,type:"string"},{header:"Role",fieldKey:"__roleTitle",type:"string"},{header:"Status",fieldKey:"status",type:"enum",enumValues:["New","Interviewing","Offer pending","Did not accept offer","Hired","Rejected","No longer with us"]},{header:"Interview Date",fieldKey:"interviewDate",type:"date"},{header:"Interviewer",fieldKey:"interviewer",type:"string"},{header:"English Level",fieldKey:"englishLevel",type:"string"},{header:"English Accent",fieldKey:"englishAccent",type:"string"},{header:"Source",fieldKey:"source",type:"string"},{header:"Strengths",fieldKey:"strengths",type:"string"},{header:"Weaknesses",fieldKey:"weaknesses",type:"string"},{header:"Goals",fieldKey:"goals",type:"string"}
1,{header:"Max Salary",fieldKey:"salaryMax",type:"number"},{header:"Requested Rate",fieldKey:"requestedRate",type:"number"},{header:"Assessment Score",fieldKey:"assessmentScore",type:"number"},{header:"Has Computer",fieldKey:"hasComputer",type:"boolean"},{header:"Qualifications & Skills",fieldKey:"qualificationsAndSkills",type:"string"},{header:"Background",fieldKey:"background",type:"string"},{header:"Resume",fieldKey:"resume",type:"url"},{header:"Notes",fieldKey:"notes",type:"string"},{header:"Created At",fieldKey:"__ignoredCreatedAt",type:"date",readonly:!0},{header:"Updated At",fieldKey:"__ignoredUpdatedAt",type:"date",readonly:!0}];function c(e,a){let t=new Blob([e],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}),r=window.URL.createObjectURL(t),n=document.createElement("a");n.href=r,n.download=a,n.click(),window.URL.revokeObjectURL(r)}function m(e){if(null==e)return"";if(e instanceof Date)return e;if("object"==typeof e){if("richText"in e&&Array.isArray(e.richText))return e.richText.map(e=>e.text??"").join("");if("text"in e)return e.text??"";if("result"in e)return e.result;if("error"in e)return"";if("hyperlink"in e)return e.hyperlink??""}return e}function u(e){if(e instanceof Date)return isNaN(e.getTime())?null:e.toISOString().split("T")[0];let a=String(e??"").trim();if(!a)return null;let t=/^(\d{4}-\d{2}-\d{2})/.exec(a);if(t)return t[1];let r=/^(\d{1,2})\/(\d{1,2})\/(\d{4})/.exec(a);if(r){let e=r[1].padStart(2,"0"),a=r[2].padStart(2,"0");return`${r[3]}-${e}-${a}`}let n=new Date(a);return isNaN(n.getTime())?null:n.toISOString().split("T")[0]}function y(e,a,t){let r=m(e);if(null!=r&&""!==r)switch(a.type){case"string":case"url":return String(r).trim();case"number":{let e="number"==typeof r?r:parseFloat(String(r).replace(/[$,\s]/g,""));if(Number.isNaN(e))return void t.push(`"${a.header}": expected a number, got "${r}"`);return e}case"email":{let e=String(r).trim();if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e))return void t.push(`"${a.header}": invalid email "${e}"`);return e}case"date":{let e=u(r);if(!e)return void t.push(`"${a.header}": invalid date "${r}"`);return e}case"enum":{let e=String(r).trim();if(!a.enumValues.includes(e))return void t.push(`"${a.header}": value "${e}" must be one of: ${a.enumValues.join(", ")}`);return e}case"boolean":{let e=String(r).trim().toLowerCase();if(["yes","true","1","y","si","s\xed"].includes(e))return!0;if(["no","false","0","n"].includes(e))return!1;t.push(`"${a.header}": expected Yes or No, got "${r}"`);return}}}function h(e,a,t){let r=new Set([...a.map(e=>e.header),...t.map(e=>e.name)]),n=new Set(e.filter(Boolean)),o=[];for(let e of a)n.has(e.header)||o.push(`Missing required column: "${e.header}"`);for(let e of t)n.has(e.name)||o.push(`Missing custom field column: "${e.name}"`);for(let e of n)r.has(e)||o.push(`Unknown column: "${e}". Do not rename, add, or remove columns â download a fresh template.`);return o}async function p(e){let a=new(n()).Workbook,t=await e.arrayBuffer();await a.xlsx.load(t);let r=a.worksheets[0];if(!r)throw Error("The file contains no worksheets");let o=[];r.getRow(1).eachCell({includeEmpty:!1},(e,a)=>{o[a-1]=String(m(e.value)).trim()});let i=[];return r.eachRow({includeEmpty:!1},(e,a)=>{if(1===a)return;let t={};e.eachCell({includeEmpty:!0},(e,a)=>{let r=o[a-1];r&&(t[r]=e.value)}),Object.values(t).some(e=>{let a=m(e);return""!==a&&null!=a})&&i.push(t)}),{headers:o,rows:i}}function f(e,a,t){let r=[],n={},o={};for(let t of a){let a=y(e[t.header],t,r);t.readonly||void 0!==a&&(n[t.fieldKey]=a)}for(let a of t){let t=function(e,a,t){let r=m(e);if(null!=r&&""!==r)switch(a.type){case"number":case"price":{let e="number"==typeof r?r:parseFloat(String(r).replace(/[$,\s]/g,""));if(Number.isNaN(e))return void t.push(`Custom field "${a.name}": expected a number`);return e}case"date":{let e=u(r);if(!e)return void t.push(`Custom field "${a.name}": invalid date`);return e}case"multiselect":{if(Array.isArray(r))return r;let e=String(r).split(/[,;]/).map(e=>e.trim()).filter(Boolean);if(a.options&&a.options.length>0){let r=e.filter(e=>!a.options.includes(e));if(r.length)return void t.push(`Custom field "${a.name}
1": ${r.join(", ")} not in allowed options`)}return e}case"select":{let e=String(r).trim();if(a.options&&a.options.length>0&&!a.options.includes(e))return void t.push(`Custom field "${a.name}": "${e}" must be one of: ${a.options.join(", ")}`);return e}default:return String(r).trim()}}(e[a.name],a,r);void 0!==t&&(o[a.id]=t)}for(let e of a)e.readonly||e.required&&(void 0===n[e.fieldKey]||""===n[e.fieldKey])&&!r.some(a=>a.startsWith(`"${e.header}"`))&&r.push(`"${e.header}" is required`);for(let e of t)e.required&&void 0===o[e.id]&&r.push(`Custom field "${e.name}" is required`);return Object.keys(o).length>0&&(n.customFields=o),r.length>0?{errors:r}:{record:n,errors:r}}async function g(e,a,t,r){let o=new(n()).Workbook,i=o.addWorksheet("Import");i.columns=[...e.map(e=>e.header),...a.map(e=>e.name)].map(e=>({header:e,key:e,width:Math.max(e.length+2,16)})),i.getRow(1).font={bold:!0},i.getRow(1).fill={type:"pattern",pattern:"solid",fgColor:{argb:"FFE5E7EB"}};let d={};for(let a of e)d[a.header]=t[a.header]??"";for(let e of a)d[e.name]=t[e.name]??"";i.addRow(d);let l=o.addWorksheet("Instructions");for(let a of(l.addRow(["Do NOT rename, add, or remove columns in the Import sheet."]),l.addRow(["The column order does not matter, but every column must be present exactly as written."]),l.addRow(["Delete the example row before uploading and add one row per record."]),l.addRow([]),l.addRow(["Column","Required","Type","Allowed values"]),l.getRow(5).font={bold:!0},e))l.addRow([a.header,a.readonly?"Ignored on import":a.required?"Required":"Optional",a.type,a.enumValues?a.enumValues.join(", "):""]);for(let e of a)l.addRow([e.name,e.required?"Required":"Optional",`custom: ${e.type}`,e.options?e.options.join(", "):""]);l.columns=[{width:32},{width:20},{width:16},{width:60}],c(await o.xlsx.writeBuffer(),`${r}.xlsx`)}async function w(e){let a={"Full Name":"Jane Doe","Personal Email":"[email protected]","Business Email":"[email protected]",Phone:"+1 555-0100","Date Hired":"2024-01-15",Birthday:"1990-05-20",Country:"USA",City:"New York",Address:"123 Main St","Contract Type":"full_time_salary","Pay Rate ($)":75e3,"Hourly Rate ($)":"",Title:"Software Engineer",Department:"Engineering",Role:"employee","Contract URL":"",Status:"Active","Is Leader":"No","Vacation Days Per Year":15,"Vacation Days Per Year Left":"","Has Bonus":"No"};for(let t of e)a[t.name]="";await g(i,e,a,"employees-import-template")}async function S(e){let a={Name:"Acme Corp",Email:"[email protected]",Phone:"+1 555-0199",Address:"500 Market St",City:"San Francisco",Country:"US",Zip:"94105","Monthly Revenue":12500,Status:"Active",Leader:"","Start Date":"2024-03-01","Collection Preference":"firstOfMonth"};for(let t of e)a[t.name]="";await g(d,e,a,"clients-import-template")}async function C(e){let a={Name:"Alex Rivera",Role:"Software Engineer",Status:"New","Interview Date":"2026-05-10",Interviewer:"Maria Santos","English Level":"C1","English Accent":"Neutral",Source:"LinkedIn",Strengths:"Strong problem solver",Weaknesses:"",Goals:"Grow into a senior role","Max Salary":8e4,"Requested Rate":45,"Assessment Score":92,"Has Computer":"Yes","Qualifications & Skills":"React, Node, TypeScript",Background:"5 years of experience",Resume:"https://example.com/resume.pdf",Notes:"","Created At":"","Updated At":""};for(let t of e)a[t.name]="";await g(s,e,a,"candidates-import-template")}async function b(e,a){let{headers:t,rows:r}=await p(e),n=h(t,i,a);if(n.length)return{valid:[],errors:[{row:1,errors:n}]};let o=[],d=[];return r.forEach((e,t)=>{let{record:r,errors:n}=f(e,i,a);n.length?d.push({row:t+2,errors:n}):r&&o.push(r)}),{valid:o,errors:d}}async function K(e,a,t){let{headers:r,rows:n}=await p(e),i=h(r,d,a);if(i.length)return{valid:[],errors:[{row:1,errors:i}]};let l=[],s=[];return n.forEach((e,r)=>{let{record:n,errors:i}=f(e,d,a),c=[...i];if(n){let e=n.__leaderName;if(delete n.__leaderName,e&&"N/A"!==e&&"Unknown"!==e){let a=t[e];a?n.podLeader=a:c.push(`"Leader": no employee named "${e}" â use an existing employee name, "N/A", or leave empty`)}if(n.country){let e=String(n.country).trim(),a=o.F.find(a=>"ALL"!==a.code&&a.code.toUpperCase()===e.toUpperCase());if(a)n.country=a.code;else{let a=o.F.find(a=>"ALL"!==a.code&&a.name.toLowerCase()===e.toLowerCase());a&&(n.country=a.code)}}}c.length?s.push({row:r+2,errors:c}):n&&l.push(n)}),{valid:l,errors:s}}async function R(e,a,t){let{headers:r,rows:n}=await p(e),o=h(r,s,a);if(o.length)return{valid:[],errors:[{row:1,errors:o}]};let i=t.reduce((e,a)=>(a.title&&(e[a.title.trim().toLowerCase()]=a.id),e),{}),d=[],l=[];
1return n.forEach((e,t)=>{let{record:r,errors:n}=f(e,s,a);if(r){let e=r.__roleTitle?.trim();if(delete r.__roleTitle,e){let a=i[e.toLowerCase()];r.roleTitle=e,r.role=a||""}else r.role=""}n.length?l.push({row:t+2,errors:n}):r&&d.push(r)}),{valid:d,errors:l}}let P=["check","ach","wire","credit_card","cash"],N=["active","inactive"];async function v(){await g(l,[],{Name:"Acme Supplies Co.","Contact Name":"John Smith",Email:"[email protected]",Phone:"+1 555-0100",Address:"123 Main St",City:"New York",State:"NY","Zip Code":"10001",Country:"US","Tax ID":"12-3456789",Website:"https://acme.com",Notes:"Preferred supplier","Payment Terms (days)":30,"Preferred Payment":"ach",Status:"active",Category:"Office Supplies","Account Number":"","Bank Name":""},"vendors-import-template")}async function k(e){let{headers:a,rows:t}=await p(e),r=h(a,l,[]);if(r.length)return{valid:[],errors:[{row:1,errors:r}]};let n=[],o=[];return t.forEach((e,a)=>{let{record:t,errors:r}=f(e,l,[]);r.length?o.push({row:a+2,errors:r}):t&&n.push(t)}),{valid:n,errors:o}}async function A(e){let a=new(n()).Workbook,t=a.addWorksheet("Vendors");for(let a of(t.columns=l.map(e=>({header:e.header,key:e.header,width:Math.max(e.header.length+2,18)})),t.getRow(1).font={bold:!0},t.getRow(1).fill={type:"pattern",pattern:"solid",fgColor:{argb:"FFE5E7EB"}},e))t.addRow({Name:a.name||"","Contact Name":a.contactName||"",Email:a.email||"",Phone:a.phone||"",Address:a.address||"",City:a.city||"",State:a.state||"","Zip Code":a.zipCode||"",Country:a.country||"","Tax ID":a.taxId||"",Website:a.website||"",Notes:a.notes||"","Payment Terms (days)":"number"==typeof a.paymentTerms&&a.paymentTerms>0?a.paymentTerms:"","Preferred Payment":P.includes(a.preferredPaymentMethod)?a.preferredPaymentMethod:"",Status:N.includes(a.status)?a.status:"active",Category:a.category||"","Account Number":a.accountNumber||"","Bank Name":a.bankName||""});c(await a.xlsx.writeBuffer(),`vendors-export-${new Date().toISOString().split("T")[0]}.xlsx`)}let T=[{header:"SKU",fieldKey:"sku",required:!0,type:"string"},{header:"Name",fieldKey:"name",required:!0,type:"string"},{header:"Description",fieldKey:"description",type:"string"},{header:"Category",fieldKey:"category",required:!0,type:"string"},{header:"Brand",fieldKey:"brand",type:"string"},{header:"Status",fieldKey:"status",type:"enum",enumValues:["active","inactive","discontinued"]},{header:"Type",fieldKey:"type",type:"enum",enumValues:["finished_good","raw_material","component","service"]},{header:"Unit of Measure",fieldKey:"unitOfMeasure",type:"string"},{header:"Cost Price",fieldKey:"costPrice",type:"number"},{header:"Selling Price",fieldKey:"sellingPrice",type:"number"},{header:"Wholesale Price",fieldKey:"wholesalePrice",type:"number"},{header:"Currency",fieldKey:"currency",type:"string"},{header:"IVA % (AR)",fieldKey:"ivaRate",type:"number"},{header:"Reorder Point",fieldKey:"reorderPoint",type:"number"},{header:"Reorder Qty",fieldKey:"reorderQuantity",type:"number"},{header:"Lead Time (days)",fieldKey:"leadTimeDays",type:"number"},{header:"Barcode",fieldKey:"barcode",type:"string"},{header:"Vendor Name",fieldKey:"__vendorName",type:"string"},{header:"Vendor SKU",fieldKey:"supplierSku",type:"string"},{header:"Weight",fieldKey:"weight",type:"number"},{header:"Weight Unit",fieldKey:"weightUnit",type:"enum",enumValues:["kg","lb","oz","g"]},{header:"Tags",fieldKey:"__tags",type:"string"},{header:"Show in Client Portal",fieldKey:"showInClientPortal",type:"boolean"},{header:"Show in Public Store",fieldKey:"showInPublicStore",type:"boolean"}],M=T.filter(e=>e.required).map(e=>e.header);async function B(e,a){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"USD",o=new(n()).Workbook,i=o.addWorksheet("Import"),d=e.map(e=>`Stock: ${e.name.trim()}`);i.columns=[...T.map(e=>e.header),...d].map(e=>({header:e,key:e,width:Math.max(e.length+2,20)})),i.getRow(1).font={bold:!0},i.getRow(1).fill={type:"pattern",pattern:"solid",fgColor:{argb:"FFE5E7EB"}};let l={SKU:"PROD-001",Name:"Sample Product",Description:"A brief description",Category:"Electronics",Brand:"",Status:"active",Type:"finished_good","Unit of Measure":"unit","Cost Price":25,"Selling Price":49.99,"Wholesale Price":"",Currency:r||"USD","Reorder Point":10,"Reorder Qty":50,"Lead Time (days)":7,Barcode:"","Vendor Name":a[0]?.name??"","Vendor SKU":"",Weight:"","Weight Unit":"",Tags:"electronics, gadgets","Show in Client Portal":"Yes"};for(let e of d)l[e]=0;i.addRow(l);let s=o.addWorksheet("Instructions");for(let e of(s.addRow(["SKU, Name, and Category are the only required fields."]),s.addRow(["All other base columns are optional."]),s.addRow([""]),s.addRow(["Stock columns â one per warehouse in your org:"]),s.addRow([" Enter the quantity on hand in each warehouse."]),s.addRow([" Stock
1is per-location â 100 in Warehouse A + 100 in Warehouse B = 200 total."]),s.addRow([" Leave blank or 0 if a product has no stock in that warehouse."]),s.addRow([""]),s.addRow(["Vendor Name must match exactly (case-insensitive) a vendor in your system."]),s.addRow(['Tags: comma-separated values, e.g. "electronics, gadgets"']),s.addRow([t.length>0?`Currency: must be one your org has enabled â ${t.join(", ")}. Defaults to ${r||"USD"} if left blank.`:`Currency: 3-letter code, e.g. USD, EUR, GBP. Defaults to ${r||"USD"} if left blank.`]),s.addRow(["Show in Client Portal: Yes to list the product in the client portal marketplace, No to hide it."]),s.addRow(["SKU and Name must be unique â rows that duplicate an existing product, or each other, are rejected."]),s.addRow([""]),s.addRow(["Column","Required","Type","Allowed values"]).font={bold:!0},T))s.addRow([e.header,e.required?"Required":"Optional",e.type,e.enumValues?e.enumValues.join(", "):""]);for(let a of e)s.addRow([`Stock: ${a.name.trim()}`,"Optional","number","Units on hand in this warehouse"]);if(s.columns=[{width:34},{width:12},{width:16},{width:60}],a.length>0){let e=o.addWorksheet("Vendor Names (reference)");for(let t of(e.addRow(["Vendor Name"]),e.getRow(1).font={bold:!0},a))e.addRow([t.name]);e.columns=[{width:40}]}c(await o.xlsx.writeBuffer(),"products-import-template.xlsx")}async function E(e,a,t,r){let n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:new Set,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:new Set,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:[],d=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"",{headers:l,rows:s}=await p(e),c=new Set(l),u=M.filter(e=>!c.has(e));if(u.length>0)return{valid:[],errors:[{row:1,errors:u.map(e=>`Missing required column: "${e}"`)}]};let h=l.filter(e=>e.startsWith("Stock: ")),f=h.filter(e=>!t[e.slice(7).trim().toLowerCase()]);if(f.length>0)return{valid:[],errors:[{row:1,errors:f.map(e=>`Unknown warehouse column "${e}" â no warehouse named "${e.slice(7).trim()}" exists in your organization. Rename the column to match a warehouse exactly, remove it, or download a fresh template to get the current column names.`)}]};let g=[],w=[],S=new Set,C=new Set,b=new Set(i.map(e=>e.toUpperCase().trim())),K=d.toUpperCase().trim();return s.forEach((e,i)=>{let d=[],l={};for(let a of T){let t=e[a.header],r=m(t);if(""===r||null==r){a.required&&d.push(`"${a.header}" is required`);continue}let n=y(t,a,d);a.readonly||void 0===n||(l[a.fieldKey]=n)}if(void 0!==l.currency?(l.currency=String(l.currency).toUpperCase().trim(),b.size>0&&!b.has(l.currency)&&d.push(`Currency "${l.currency}" is not enabled for your organization â enable it under Accounting â Currency`)):K&&(l.currency=K),void 0!==l.sku){let e=String(l.sku).toLowerCase().trim();n.has(e)?d.push(`SKU "${l.sku}" already exists â SKUs must be unique`):S.has(e)?d.push(`SKU "${l.sku}" is duplicated earlier in this file`):S.add(e)}if(void 0!==l.name){let e=String(l.name).toLowerCase().trim();o.has(e)?d.push(`Product name "${l.name}" already exists â names must be unique`):C.has(e)?d.push(`Product name "${l.name}" is duplicated earlier in this file`):C.add(e)}let s=l.__vendorName;if(delete l.__vendorName,s){let e=a[String(s).toLowerCase().trim()];e&&(l.preferredSupplierId=e)}if(void 0!==l.category){let e=String(l.category).trim(),a=r[e.toLowerCase()];a?l.category=a:d.push(`Category "${e}" does not exist â create it first under Categories`)}let c=l.__tags;delete l.__tags,c&&(l.tags=String(c).split(",").map(e=>e.trim()).filter(Boolean));let u=[];for(let a of h){let r=t[a.slice(7).trim().toLowerCase()];if(!r)continue;let n=m(e[a]);if(""!==n&&null!=n){let e="number"==typeof n?n:parseFloat(String(n));!isNaN(e)&&e>0&&u.push({warehouseId:r,qty:e})}}u.length>0&&(l.__warehouseStock=u),d.length>0?w.push({row:i+2,errors:d}):g.push(l)}),{valid:g,errors:w}}async function I(e,a,t,r){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=new(n()).Workbook,d=i.addWorksheet("Products"),l=a.map(e=>`Stock: ${e.name.trim()}`);d.columns=[...T.map(e=>e.header),...l].map(e=>({header:e,key:e,width:Math.max(e.length+2,20)})),d.getRow(1).font={bold:!0},d.getRow(1).fill={type:"pattern",pattern:"solid",fgColor:{argb:"FFE5E7EB"}};let s={};for(let e of t)s[e.productId]||(s[e.productId]={}),s[e.productId][e.warehouseId]=(s[e.productId][e.warehouseId]??0)+(e.quantityOnHand??
10);let m=["kg","lb","oz","g"];for(let t of e){let e={SKU:t.sku||"",Name:t.name||"",Description:t.description||"",Category:o[t.category]||t.category||"",Brand:t.brand||"",Status:["active","inactive","discontinued"].includes(t.status)?t.status:"active",Type:["finished_good","raw_material","component","service"].includes(t.type)?t.type:"finished_good","Unit of Measure":t.unitOfMeasure||"unit","Cost Price":"number"==typeof t.costPrice&&t.costPrice>0?t.costPrice:"","Selling Price":"number"==typeof t.sellingPrice&&t.sellingPrice>0?t.sellingPrice:"","Wholesale Price":"number"==typeof t.wholesalePrice?t.wholesalePrice:"",Currency:t.currency||"USD","Reorder Point":"number"==typeof t.reorderPoint?t.reorderPoint:"","Reorder Qty":"number"==typeof t.reorderQuantity?t.reorderQuantity:"","Lead Time (days)":"number"==typeof t.leadTimeDays?t.leadTimeDays:"",Barcode:t.barcode||"","Vendor Name":r[t.preferredSupplierId||""]||"","Vendor SKU":t.supplierSku||"",Weight:"number"==typeof t.weight?t.weight:"","Weight Unit":m.includes(t.weightUnit)?t.weightUnit:"",Tags:Array.isArray(t.tags)?t.tags.join(", "):t.tags||"","Show in Client Portal":t.showInClientPortal?"Yes":"No","Show in Public Store":t.showInPublicStore?"Yes":"No"},n=s[t.id]??{};for(let t of a)e[`Stock: ${t.name.trim()}`]=n[t.id]??0;d.addRow(e)}c(await i.xlsx.writeBuffer(),`products-export-${new Date().toISOString().split("T")[0]}.xlsx`)}},73200:(e,a,t)=>{t.d(a,{F:()=>r});let r=[{code:"ALL",name:"All Countries"},{code:"AD",name:"Andorra"},{code:"AE",name:"United Arab Emirates"},{code:"AF",name:"Afghanistan"},{code:"AG",name:"Antigua and Barbuda"},{code:"AI",name:"Anguilla"},{code:"AL",name:"Albania"},{code:"AM",name:"Armenia"},{code:"AO",name:"Angola"},{code:"AR",name:"Argentina"},{code:"AT",name:"Austria"},{code:"AU",name:"Australia"},{code:"AW",name:"Aruba"},{code:"AZ",name:"Azerbaijan"},{code:"BA",name:"Bosnia and Herzegovina"},{code:"BB",name:"Barbados"},{code:"BD",name:"Bangladesh"},{code:"BE",name:"Belgium"},{code:"BF",name:"Burkina Faso"},{code:"BG",name:"Bulgaria"},{code:"BH",name:"Bahrain"},{code:"BI",name:"Burundi"},{code:"BJ",name:"Benin"},{code:"BM",name:"Bermuda"},{code:"BN",name:"Brunei"},{code:"BO",name:"Bolivia"},{code:"BR",name:"Brazil"},{code:"BS",name:"Bahamas"},{code:"BT",name:"Bhutan"},{code:"BW",name:"Botswana"},{code:"BY",name:"Belarus"},{code:"BZ",name:"Belize"},{code:"CA",name:"Canada"},{code:"CD",name:"Democratic Republic of the Congo"},{code:"CF",name:"Central African Republic"},{code:"CG",name:"Republic of the Congo"},{code:"CH",name:"Switzerland"},{code:"CI",name:"Ivory Coast"},{code:"CK",name:"Cook Islands"},{code:"CL",name:"Chile"},{code:"CM",name:"Cameroon"},{code:"CN",name:"China"},{code:"CO",name:"Colombia"},{code:"CR",name:"Costa Rica"},{code:"CU",name:"Cuba"},{code:"CV",name:"Cape Verde"},{code:"CY",name:"Cyprus"},{code:"CZ",name:"Czech Republic"},{code:"DE",name:"Germany"},{code:"DJ",name:"Djibouti"},{code:"DK",name:"Denmark"},{code:"DM",name:"Dominica"},{code:"DO",name:"Dominican Republic"},{code:"DZ",name:"Algeria"},{code:"EC",name:"Ecuador"},{code:"EE",name:"Estonia"},{code:"EG",name:"Egypt"},{code:"EH",name:"Western Sahara"},{code:"ER",name:"Eritrea"},{code:"ES",name:"Spain"},{code:"ET",name:"Ethiopia"},{code:"FI",name:"Finland"},{code:"FJ",name:"Fiji"},{code:"FK",name:"Falkland Islands"},{code:"FM",name:"Micronesia"},{code:"FO",name:"Faroe Islands"},{code:"FR",name:"France"},{code:"GA",name:"Gabon"},{code:"GB",name:"United Kingdom"},{code:"GD",name:"Grenada"},{code:"GE",name:"Georgia"},{code:"GF",name:"French Guiana"},{code:"GH",name:"Ghana"},{code:"GI",name:"Gibraltar"},{code:"GL",name:"Greenland"},{code:"GM",name:"Gambia"},{code:"GN",name:"Guinea"},{code:"GP",name:"Guadeloupe"},{code:"GQ",name:"Equatorial Guinea"},{code:"GR",name:"Greece"},{code:"GT",name:"Guatemala"},{code:"GW",name:"Guinea-Bissau"},{code:"GY",name:"Guyana"},{code:"HK",name:"Hong Kong"},{code:"HN",name:"Honduras"},{code:"HR",name:"Croatia"},{code:"HT",name:"Haiti"},{code:"HU",name:"Hungary"},{code:"ID",name:"Indonesia"},{code:"IE",name:"Ireland"},{code:"IL",name:"Israel"},{code:"IN",name:"India"},{code:"IQ",name:"Iraq"},{code:"IR",name:"Iran"},{code:"IS",name:"Iceland"},{code:"IT",name:"Italy"},{code:"JM",name:"Jamaica"},{code:"JO",name:"Jordan"},{code:"JP",name:"Japan"},{code:"KE",name:"Kenya"},{code:"KG",name:"Kyrgyzstan"},{code:"KH",name:"Cambodia"},{code:"KI",name:"Kiribati"},{code:"KM",name:"Comoros"},{code:"KP",name:"North Korea"},{code:"KR",name:"South Korea"},{code:"KW",name:"Kuwait"},{code:"KY",name:"Cayman Islands"},{code:"KZ",name:"Kazakhstan"},{code:"LA",name:"Laos"},{code:"LB",name:"Lebanon"},{code:"LC",name:"Saint Lucia"},{code:"LI",name:"Liechtenstein"},{code:"LK",name:"Sri Lanka"},{code:"LR",name:"Liberia"},{code:"LS",name:"Lesotho"},{code:"LT",name:"Lithuania"},{code:"LU",name:"Luxembourg"},{code:"LV",name:"Latvia"},{code:"LY",name:"Libya"},{code:"MA",name:"Morocco"},{code:"MC",name:"Monaco"},{code:"MD",name:"Moldova"},{code:"ME",name:"Montenegro"},{code:"MG",name:"Madagascar"},{code:"MH",name:"Marshall Islands"},{code:"MK",name:"North Macedonia"},{code:"ML",name:"Mali"},{code:"MM",name:"Myanmar"},{code:"MN",name:"Mongolia"},{code:"MO",name:"Macau"},{code:"MQ",name:"Martinique"},{code:"MR",name:"Mauritania"},{code:"MS",name:"Montserrat"},{code:"MT",name:"Malta"},{code:"MU",name:"Mauritius"},{code:"MV",name:"Maldives"},{code:"MW",name:"Malawi"},{code:"MX",name:"Mexico"},{code:"MY",name:"Malaysia"},{code:"MZ",name:"Mozambique"},{code:"NA",name:"Namibia"},{code:"NC",name:"New Caledonia"},{code:"NE",name:"Niger"},{code:"NG",name:"Nigeria"},{code:"NI",name:"Nicaragua"},{code:"NL",name:"Netherlands"},{code:"NO",name:"Norway"},{code:"NP",name:"Nepal"},{code:"NR",name:"Nauru"},{code:"NZ",name:"New Zealand"},{code:"OM",name:"Oman"},{code:"PA",name:"Panama"},{code:"PE",name:"Peru"},{code:"PF",name:"French Polynesia"},{code:"PG",name:"Papua New Guinea"},{code:"PH",name:"Philippines"},{code:"PK",name:"Pakistan"},{code:"PL",name:"Poland"},{code:"PM",name:"Saint Pierre and Miquelon"},{code:"PN",name:"Pitcairn Islands"},{code:"PR",name:"Puerto Rico"},{code:"PS",name:"Palestine"},{code:"PT",name:"Portugal"},{code:"PW",name:"Palau"},{code:"PY",name:"Paraguay"},{code:"QA",name:"Qatar"},{code:"RE",name:"R\xe9union"},{code:"RO",name:"Romania"},{code:"RS",name:"Serbia"},{code:"RU",name:"Russia"},{code:"RW",name:"Rwanda"},{code:"SA",name:"Saudi Arabia"}
1,{code:"SB",name:"Solomon Islands"},{code:"SC",name:"Seychelles"},{code:"SD",name:"Sudan"},{code:"SE",name:"Sweden"},{code:"SG",name:"Singapore"},{code:"SI",name:"Slovenia"},{code:"SK",name:"Slovakia"},{code:"SL",name:"Sierra Leone"},{code:"SM",name:"San Marino"},{code:"SN",name:"Senegal"},{code:"SO",name:"Somalia"},{code:"SR",name:"Suriname"},{code:"SS",name:"South Sudan"},{code:"ST",name:"S\xe3o Tom\xe9 and Pr\xedncipe"},{code:"SV",name:"El Salvador"},{code:"SY",name:"Syria"},{code:"SZ",name:"Eswatini"},{code:"TC",name:"Turks and Caicos Islands"},{code:"TD",name:"Chad"},{code:"TG",name:"Togo"},{code:"TH",name:"Thailand"},{code:"TJ",name:"Tajikistan"},{code:"TL",name:"East Timor"},{code:"TM",name:"Turkmenistan"},{code:"TN",name:"Tunisia"},{code:"TO",name:"Tonga"},{code:"TR",name:"Turkey"},{code:"TT",name:"Trinidad and Tobago"},{code:"TV",name:"Tuvalu"},{code:"TW",name:"Taiwan"},{code:"TZ",name:"Tanzania"},{code:"UA",name:"Ukraine"},{code:"UG",name:"Uganda"},{code:"US",name:"United States"},{code:"UY",name:"Uruguay"},{code:"UZ",name:"Uzbekistan"},{code:"VA",name:"Vatican City"},{code:"VC",name:"Saint Vincent and the Grenadines"},{code:"VE",name:"Venezuela"},{code:"VN",name:"Vietnam"},{code:"VU",name:"Vanuatu"},{code:"WF",name:"Wallis and Futuna"},{code:"WS",name:"Samoa"},{code:"YE",name:"Yemen"},{code:"YT",name:"Mayotte"},{code:"ZA",name:"South Africa"},{code:"ZM",name:"Zambia"},{code:"ZW",name:"Zimbabwe"}]}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.