2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{bc as K,bd as d,aO as j,r as f,c as p}from"./index-BUdRbiwj.js";class q extends K{constructor(){super("/vendors")}async getAll(){try{return(await d.get(this.endpoint)).data}catch(a){throw this.handleError(a)}}async getById(a){try{return(await d.get(`${this.endpoint}/${a}`)).data}catch(e){throw this.handleError(e)}}async create(a){try{return(await d.post(this.endpoint,{name:a.name,code:a.code||"",type:a.type,status:a.status||"active",contactPerson:a.contactPerson||"",email:a.email||"",phone:a.phone||"",website:a.website||"",address:a.address||{},taxId:a.taxId||"",businessNumber:a.businessNumber||"",paymentTerms:a.paymentTerms||"",currency:a.currency||"USD",isPreferred:a.isPreferred||!1,rating:a.rating||null,notes:a.notes||""})).data}catch(e){throw this.handleError(e)}}async update(a,e){try{return(await d.patch(`${this.endpoint}/${a}`,{name:e.name,code:e.code,type:e.type,status:e.status,contactPerson:e.contactPerson,email:e.email,phone:e.phone,website:e.website,address:e.address,taxId:e.taxId,businessNumber:e.businessNumber,paymentTerms:e.paymentTerms,currency:e.currency,isPreferred:e.isPreferred,rating:e.rating,notes:e.notes})).data}catch(s){throw this.handleError(s)}}async delete(a){try{await d.delete(`${this.endpoint}/${a}`)}catch(e){throw this.handleError(e)}}async search(a={}){try{const e=new URLSearchParams;a.search&&e.append("search",a.search),a.type&&e.append("type",a.type),a.status&&e.append("status",a.status),a.isPreferred!==void 0&&e.append("isPreferred",a.isPreferred),a.sortBy&&e.append("sortBy",a.sortBy),a.sortOrder&&e.append("sortOrder",a.sortOrder),a.page!==void 0&&e.append("page",a.page),a.size!==void 0&&e.append("size",a.size);const s=e.toString()?`${this.endpoint}/search?${e.toString()}`:`${this.endpoint}/search`;return(await d.get(s)).data}catch(e){throw this.handleError(e)}}async getByType(a){try{return(await d.get(`${this.endpoint}/type/${a}`)).data}catch(e){throw this.handleError(e)}}async getPreferred(){try{return(await d.get(`${this.endpoint}/preferred`)).data}catch(a){throw this.handleError(a)}}async updateStatus(a,e){try{return(await d.patch(`${this.endpoint}/${a}/status`,{status:e})).data}catch(s){throw this.handleError(s)}}async setPreferred(a,e){try{return(await d.patch(`${this.endpoint}/${a}/preferred`,{isPreferred:e})).data}catch(s){throw this.handleError(s)}}async updateRating(a,e){try{return(await d.patch(`${this.endpoint}/${a}/rating`,{rating:e})).data}catch(s){throw this.handleError(s)}}async bulkUpdate(a){try{return(await d.patch(`${this.endpoint}/bulk`,{updates:a})).data}catch(e){throw this.handleError(e)}}async getStatistics(){try{return(await d.get(`${this.endpoint}/statistics`)).data}catch(a){throw this.handleError(a)}}async validateCode(a,e=null){try{const s=new URLSearchParams;return s.append("code",a),e&&s.append("excludeId",e),(await d.get(`${this.endpoint}/validate-code?${s.toString()}`)).data}catch(s){throw this.handleError(s)}}}const v=new q,y={PARTS_SUPPLIER:"parts_supplier",SERVICE_PROVIDER:"service_provider",EQUIPMENT_VENDOR:"equipment_vendor",CONTRACTOR:"contractor",CONSULTANT:"consultant",OTHER:"other"},W={[y.PARTS_SUPPLIER]:"Parts Supplier",[y.SERVICE_PROVIDER]:"Service Provider",[y.EQUIPMENT_VENDOR]:"Equipment Vendor",[y.CONTRACTOR]:"Contractor",[y.CONSULTANT]:"Consultant",[y.OTHER]:"Other"},h={ACTIVE:"active",INACTIVE:"inactive",PENDING:"pending",SUSPENDED:"suspended"},X={[h.ACTIVE]:"Active",[h.INACTIVE]:"Inactive",[h.PENDING]:"Pending Approval",[h.SUSPENDED]:"Suspended"},ee={id:null,name:"",code:"",type:y.PARTS_SUPPLIER,status:h.ACTIVE,contactPerson:"",email:"",phone:"",website:"",address:{street:"",city:"",state:"",postalCode:"",country:""},taxId:"",businessNumber:"",paymentTerms:"",currency:"USD",isPreferred:!1,rating:null,notes:"",createdAt:null,updatedAt:null,createdBy:null,updatedBy:null},ae={name:{minLength:2,maxLength:100,pattern:/^[a-zA-Z0-9\s\-_.,()&]+$/},code:{minLength:2,maxLength:20,pattern:/^[A-Z0-9\-_]+$/},email:{pattern:/^[^\s@]+@[^\s@]+\.[^\s@]+$/},phone:{pattern:/^[\d\s\-+()]+$/},website:{pattern:/^https?:\/\/.+/},contactPerson:{maxLength:100},rating:{min:1,max:5},notes:{maxLength:1e3}},te=[{label:"Net 15",value:"net_15"},{label:"Net 30",value:"net_30"},{label:"Net 45",value:"net_45"},{label:"Net 60",value:"net_60"},{label:"2/10 Net 30",value:"2_10_net_30"},{label:"Due on Receipt",value:"due_on_receipt"},{label:"Cash on Delivery",value:"cod"},{label:"Prepaid",value:"prepaid"}],re=[{label:"USD - US Dollar",value:"USD"},{label:"EUR - Euro",value:"EUR"},{label:"GBP - British Pound",value:"GBP"},{label:"CAD - Canadian Dollar",value:"CAD"},{label:"JPY - Japanese Yen",value:"JPY"},{label:"AUD - Australian Dollar",value:"AUD"},{label:"CHF - Swiss Franc",value:"CHF"},{label:"CNY - Chinese Yuan",value:"CNY"}],ne=[{label:"⭐ 1 Star",value:1},{label:"⭐⭐ 2 Stars",value:2},{label:"⭐⭐⭐ 3 Stars",value:3},{label:"⭐⭐⭐⭐ 4 Stars",value:4},{label:"⭐⭐⭐⭐⭐ 5 Stars",value:5}],se=[{label:"Name (A-Z)",value:"name_asc"},{label:"Name (Z-A)",value:"name_desc"},{label:"Code (A-Z)",value:"code_asc"},{label:"Code (Z-A)",value:"code_desc"},{label:"Created Date (Newest)",value:"created_desc"},{label:"Created Date (Oldest)",value:"created_asc"},{label:"Rating (Highest)",value:"rating_desc"},{label:"Rating (Lowest)",value:"rating_asc"},{label:"Type",value:"type_asc"}],le=[{label:"United States",value:"US"},{label:"Canada",value:"CA"},{label:"United Kingdom",value:"GB"},{label:"Germany",value:"DE"},{label:"France",value:"FR"},{label:"Australia",value:"AU"},{label:"Japan",value:"JP"},{label:"China",value:"CN"},{label:"India",value:"IN"},{label:"Brazil",value:"BR"},{label:"Mexico",value:"MX"},{label:"Netherlands",value:"NL"},{label:"Switzerland",value:"CH"},{label:"Sweden",value:"SE"},{label:"Norway",value:"NO"},{label:"Denmark",value:"DK"},{label:"Finland",value:"FI"},{label:"Italy",value:"IT"},{label:"Spain",value:"ES"},{label:"South Korea",value:"KR"},{label:"Singapore",value:"SG"},{label:"New Zealand",value:"NZ"}],oe=j("vendors",()=>{const l=f([]),a=f(null),e=f(!1),s=f(null),i=f({}),w=f({page:0,size:20,totalElements:0,totalPages:0}),g=f(null),C=p(()=>l.value.reduce((t,n)=>(t[n.id]=n,t),{})),I=p(()=>l.value.filter(t=>t.status===h.ACTIVE)),T=p(()=>l.value.filter(t=>t.isPreferred&&t.status===h.ACTIVE)),N=p(()=>Object.values(y).reduce((t,n)=>(t[n]=l.value.filter(r=>r.type===n),t),{})),A=p(()=>{const t=l.value.length,n=l.value.filter(c=>c.status===h.ACTIVE).length,r=l.value.filter(c=>c.status===h.INACTIVE).length,o=l.value.filter(c=>c.status===h.PENDING).length,u=l.value.filter(c=>c.status===h.SUSPENDED).length,b=l.value.filter(c=>c.isPreferred).length,S=Object.values(y).reduce((c,m)=>(c[m]=l.value.filter(J=>J.type===m).length,c),{}),E=l.value.filter(c=>c.rating!==null&&c.rating!==void 0),P=E.length>0?E.reduce((c,m)=>c+m.rating,0)/E.length:0;return{total:t,active:n,inactive:r,pending:o,suspended:u,preferred:b,byType:S,averageRating:Math.round(P*10)/10}}),V=p(()=>t=>C.value[t]||null),_=p(()=>t=>N.value[t]||[]),O=p(()=>!i.value||Object.keys(i.value).length===0?l.value:l.value.filter(t=>{var n,r,o;if(i.value.search){const u=i.value.search.toLowerCase(),b=t.name.toLowerCase().includes(u),S=(n=t.code)==null?void 0:n.toLowerCase().includes(u),E=(r=t.contactPerson)==null?void 0:r.toLowerCase().includes(u),P=(o=t.email)==null?void 0:o.toLowerCase().includes(u);if(!b&&!S&&!E&&!P)return!1}return!(i.value.type&&t.type!==i.value.type||i.value.status&&t.status!==i.value.status||i.value.isPreferred!==void 0&&t.isPreferred!==i.value.isPreferred)})),R=async(t=!1)=>{const r=Date.now();if(!(!t&&g.value&&r-g.value<3e5)){e.value=!0,s.value=null;try{const o=await v.getAll();l.value=o,g.value=r}catch(o){throw s.value=o.message,console.error("Failed to initialize vendors:",o),o}finally{e.value=!1}}},U=async(t={})=>{e.value=!0,s.value=null,i.value={...t};try{const n={...t,page:t.page||0,size:t.size||20},r=await v.search(n);r.content?(l.value=r.content,w.value={page:r.number||0,size:r.size||20,totalElements:r.totalElements||0,totalPages:r.totalPages||0}):l.value=r}catch(n){throw s.value=n.message,console.error("Failed to fetch vendors:",n),n}finally{e.value=!1}},$=async t=>{e.value=!0,s.value=null;try{const n=await v.create(t);return l.value.push(n),n}catch(n){throw s.value=n.message,console.error("Failed to create vendor:",n),n}finally{e.value=!1}},x=async(t,n)=>{var r;e.value=!0,s.value=null;try{const o=await v.update(t,n),u=l.value.findIndex(b=>b.id===t);return u!==-1&&(l.value[u]=o),((r=a.value)==null?void 0:r.id)===t&&(a.value=o),o}catch(o){throw s.value=o.message,console.error("Failed to update vendor:",o),o}finally{e.value=!1}},L=async t=>{var n;e.value=!0,s.value=null;try{await v.delete(t),l.value=l.value.filter(r=>r.id!==t),((n=a.value)==null?void 0:n.id)===t&&(a.value=null)}catch(r){throw s.value=r.message,console.error("Failed to delete vendor:",r),r}finally{e.value=!1}},B=async t=>{if(!t){a.value=null;return}const n=V.value(t);if(n)return a.value=n,n;e.value=!0,s.value=null;try{const r=await v.getById(t);return a.value=r,l.value.find(o=>o.id===t)||l.value.push(r),r}catch(r){throw s.value=r.message,console.error("Failed to fetch vendor:",r),r}finally{e.value=!1}},F=async(t,n)=>{e.value=!0,s.value=null;try{const r=await v.updateStatus(t,n),o=l.value.findIndex(u=>u.id===t);return o!==-1&&(l.value[o]={...l.value[o],status:n}),r}catch(r){throw s.value=r.message,console.error("Failed to update vendor status:",r),r}finally{e.value=!1}},z=async(t,n)=>{e.value=!0,s.value=null;try{const r=await v.setPreferred(t,n),o=l.value.findIndex(u=>u.id===t);return o!==-1&&(l.value[o]={...l.value[o],isPreferred:n}),r}catch(r){throw s.value=r.message,console.error("Failed to update vendor preferred status:",r),r}finally{e.value=!1}},G=async(t,n)=>{e.value=!0,s.value=null;try{const r=await v.updateRating(t,n),o=l.value.findIndex(u=>u.id===t);return o!==-1&&(l.value[o]={...l.value[o],rating:n}),r}catch(r){throw s.value=r.message,console.error("Failed to update vendor rating:",r),r}finally{e.value=!1}},Y=async t=>{e.value=!0,s.value=null;try{const n=await v.bulkUpdate(t);return n.forEach(r=>{const o=l.value.findIndex(u=>u.id===r.id);o!==-1&&(l.value[o]=r)}),n}catch(n){throw s.value=n.message,console.error("Failed to bulk update vendors:",n),n}finally{e.value=!1}},D=async(t,n=null)=>{try{return(await v.validateCode(t,n)).isValid}catch(r){return console.error("Failed to validate vendor code:",r),!1}},Z=async()=>{g.value=null,await R(!0)},k=()=>{s.value=null},M=()=>{a.value=null},H=()=>{l.value=[],a.value=null,g.value=null,i.value={},w.value={page:0,size:20,totalElements:0,totalPages:0}};return{vendors:p(()=>l.value),currentVendor:p(()=>a.value),loading:p(()=>e.value),error:p(()=>s.value),searchCriteria:p(()=>i.value),pagination:p(()=>w.value),vendorsById:C,activeVendors:I,preferredVendors:T,vendorsByType:N,vendorStats:A,getVendorById:V,getVendorsByType:_,filteredVendors:O,initializeVendors:R,fetchVendors:U,createVendor:$,updateVendor:x,deleteVendor:L,setCurrentVendor:B,updateVendorStatus:F,setVendorPreferred:z,updateVendorRating:G,bulkUpdateVendors:Y,validateVendorCode:D,refreshVendors:Z,clearError:k,clearCurrentVendor:M,clearVendors:H}});export{re as C,te as P,y as V,h as a,ne as b,le as c,ee as d,ae as e,X as f,W as g,se as h,oe as u};
|