UNPKG

plxdcma_eshop

Version:

Instala todo lo necesario para una tienda virtual

752 lines (694 loc) 24.6 kB
var memorymanager=require(`./memorymanager.js`) let plxsessions=require(`plxdcma_sessions`) let sqltableinstalers=require(`plxdcma_sqltableinstalers`) var plxdcma_dbclient=require(`plxdcma_dbclient`) var plxdcma_standarinit=require(`plxdcma_standarinit`) var plxdcma_accessmanager=require(`plxdcma_accessmanager`) var myux=require(`plxdcma_myux`) let dbclient=require(`plxdcma_dbclient`) let imagepicker=require(`plxdcma_imagesmanager`) var guardarImagen=imagepicker.guardarImagen let urlgen=require(`plxdecma_urlcodegen`) var path=require(`path`) var fs=require(`fs`) var products=dbclient.table("products") var tables=dbclient.table("facturas") sqltableinstalers.add([path.join(__dirname,"dbcreates")]) function doesItExist(databasename,tablename,handler){ var pool=plxdcma_standarinit.pool pool.query(`SELECT count(*) as x FROM information_schema.TABLES WHERE TABLE_SCHEMA LIKE 'eshop' AND TABLE_TYPE LIKE 'BASE TABLE' AND TABLE_NAME = 'facturas';`,function(er,resutl){ handler(resutl[0].x > 0) }) } function proceedToRegisterStandars(perfilId,productId,usuariosDefaultStandares,standares,conclusion){ var pool=plxdcma_standarinit.pool var productid=productId //var standares=standares var estandares=standares for(var each in estandares){ estandares[each][0]=productid } var pendingPromises=[] for(var i = 0 ; i < estandares.length;i++){ var tx=estandares[i][3] var wasInside=false for(var each2 in usuariosDefaultStandares){ var t=usuariosDefaultStandares[each2] if(t.text == tx){ standares[each][3]=t.id wasInside=true break } } if(wasInside == false){ pendingPromises.push(new Promise(function(resolve,reject){ var array=standares[i] pool.query(`insert into productos_perfil_regproducts_standaroptions set ? `,{perfil:perfilId,texto:array[3]},function(er,result){ if(er != null){ console.log(er) } usuariosDefaultStandares.push({ text:this.array[3], id:result.insertId }) resolve(result.insertId) }.bind({array:array})) })) } } Promise.all(pendingPromises).then(function(){ pool.query(`delete from productos_estandares where product = ${productId}`,function(){ pool.query(`insert into productos_estandares(product,precio,inventario,option) values ? `,[estandares],function(e,r){ conclusion(r) }) }) }) } function proceedToRegisterProduct(req,res){ var userinsession=plxsessions.usuarioEn(req,res) var perfilId=userinsession.perfil.id var usuariosDefaultStandares=userinsession.usuariosDefaultStandares if(usuariosDefaultStandares == null){ usuariosDefaultStandares=[] userinsession.usuariosDefaultStandares=usuariosDefaultStandares } var nombre =req.body.nombre; var descripcion =req.body.descripcion; var currency =req.body.currency ?? req.body.moneda; var moneda=currency var caracteristics=req.body.caracteristics ?? req.body.caracteristicas; var imagesStrings =req.body.images var estandares =req.body.standares; var urlofProduct=urlgen().toLowerCase() var spromesas=[] var pool=plxdcma_standarinit.pool var inserting={ nombre:nombre, descripcion:descripcion, url:urlofProduct, shop:userinsession.currentShop.id } pool.query(`insert into productos set ? `,inserting,function(er,result){ if(er != null){ console.log(`Er`) console.log(er) } var estandares=req.body.standares var standares=estandares inserting.id=result.insertId var productid=result.insertId for(var each in estandares){ estandares[each][0]=productid } var pendingPromises=[] for(var i = 0 ; i < estandares.length;i++){ var tx=estandares[i][3] if(tx == null || tx == ""){ tx=tx.toLowerCase().trim("") } estandares[i][3]=tx var wasInside=false for(var each2 in usuariosDefaultStandares){ var t=usuariosDefaultStandares[each2] if(t.texto == tx){ estandares[i][3]=t.id wasInside=true break } } if(wasInside == false){ pendingPromises.push(new Promise(function(resolve,reject){ var array=estandares[i] pool.query(`insert into productos_perfil_regproducts_standaroptions set ? `,{perfil:perfilId,texto:array[3]},function(er,result){ if(er != null){ console.log(er) } usuariosDefaultStandares.push({ texto:this.array[3], id:result.insertId }) this.array[3]=result.insertId resolve() }.bind({array:array})) })) } } Promise.all(pendingPromises).then(function(){ if(userinsession.myshop == null){ userinsession.myshop={} } userinsession.myshop.previewProduct=inserting var finalizingPromises=[] var insertid=inserting.id var insertscaracteristicas=[] for(var each in caracteristics){ var c=caracteristics[each] insertscaracteristicas.push([productid,c]) } pool.query(`insert into productos_estandares(product,precio,inventario,texto,moneda) values ? `,[estandares]) if(insertscaracteristicas.length > 0){ pool.query(`insert into productos_caracteristicas(product,caracteristics) value ? `,[insertscaracteristicas]) } if(module.exports.onProductDidRegister != null){ module.exports.onProductDidRegister(inserting,req,res,function(){ res.json({ state:true, id:result.insertId, url:urlofProduct }) }) }else{ res.json(reutnrmsg) } }) }) } plxdcma_accessmanager.onLogin(function(sessionObject,conclusion){ var pool=plxdcma_standarinit.pool pool.query(`select id,texto from productos_perfil_regproducts_standaroptions where perfil = ${sessionObject.perfil.id}`,function(er,result){ if(er != null){ console.log(`er `) console.log(er) } sessionObject.usuariosDefaultStandares=result console.log(`running on login`) conclusion() }) }) plxdcma_standarinit.use(function(app,interfacingfunction){ app.get(`/myshop.js`,function(req,res){ fs.readFile(path.join(__dirname,"public","js","init.js"),"utf8",function(err,html){ res.write(html) res.end() }) }) app.get(`/myshop/register/product.js`,function(req,res){ var promesas=[] promesas.push(new Promise(function(accept,reject){ fs.readFile(path.join(__dirname,"public","js","registingproduct","posting.js"),"utf8",function(err,html){ accept(html) }) })) promesas.push(new Promise(function(accept,reject){ fs.readFile(path.join(__dirname,"public","js","registrymanager.js"),"utf8",function(err,html){ accept(html) }) })) Promise.all(promesas).then(function(results){ fs.readFile(path.join(__dirname,"productregistrymodal.ejs"),"utf8",function(err,html){ var xz="`"+html+"`" var ntext=` window.addEventListener('load',function(){ var dx=document.createElement("div") dx.innerHTML=${xz} document.body.appendChild(dx) }) ` res.write(`${results.join("")} ${ntext}`) res.end() }) }) }) app.get(`/myshop/register/product.css`,function(req,res){ fs.readFile(path.join(__dirname,"public","css","productregistry.css"),"utf8",function(err,html){ res.write(html) res.end() }) }) app.get(`/myshop/main.css`,function(req,res){ fs.readFile(path.join(__dirname,"public","css","main.css"),"utf8",function(err,html){ res.write(html) res.end() }) }) app.post(`/myshop/myproductstandars`,function(req,res){ var s=plxsessions.usuarioEn(req,res) if(s == null || s.perfil == null){ res.json({state:0,msg:"nope"}) return } var pool=plxdcma_standarinit.pool pool.query(`select id,texto from productos_perfil_regproducts_standaroptions where perfil = ${s.perfil.id}`,function(er,r){ res.json(r) }) }) app.post(`/myproduct/add/image`,function(req,res){ var imageurl=urlgen().toLowerCase() var data=req.body var userinsession=plxsessions.usuarioEn(req,res) var productId=userinsession.myshop.previewProduct.productId ?? userinsession.myshop.previewProduct.id; var pool=plxdcma_standarinit.pool if(data.length == null){ data=[data] } var urls=[] var promesas=[] for(var i = 0 ; i < data.length;i++){ var imageurl=urlgen().toLowerCase() urls.push(imageurl) guardarImagen(`${imageurl}`,data[i]) promesas.push(new Promise(function(resolve, reject) { pool.query(`insert into mediaresource set ?`,{ owner:userinsession.perfil.id, url:imageurl },function(er,insert){ resolve(insert.insertId) }) })) } res.json(urls) memorymanager.articulosImagesMemoryArray.search(function(item){ if(item[0].id_ == productId){ item.push({id_:productId,_id:imageurl}) return true } }) Promise.all(promesas).then(function(insertIds){ var ars=[] for(var each in insertIds ){ ars.push([productId,insertIds[each]]) } pool.query(`insert into productos_recursos(id_,_id) values ?`,[ars]) }) }) app.post(`/myshop/reg/product`,function(req,res){ if(module.exports.canProductBeRegistered != null){ module.exports.canProductBeRegistered(req,res,function(itCan,messageDown){ if(itCan){ proceedToRegisterProduct(req,res) }else{ res.json({state:false,msg:messageDown}) } }) }else{ proceedToRegisterProduct(req,res) } }) app.post(`/myshop/update/product/standars`,function(req,res){ var userinsession=plxsessions.usuarioEn(req,res) if(userinsession == null){ res.json({state:0,msg:"nope"}) return } var perfilId=userinsession.perfil.id var previewProduct=userinsession.myshop.previewProduct if(productId != previewProduct.id){ res.json({state:0,msg:"nope"}) return } var usuariosDefaultStandares=userinsession.usuariosDefaultStandares var standares=req.body.standares proceedToRegisterStandars(perfilId,productId,usuariosDefaultStandares,standares,function(result){ res.json(result) }) }) return [] }) module.exports.prepareManager=function(req){ imagepicker.use(req) dbclient.use(req) plxdcma_dbclient.use(req) myux.use(req) if(req.__myAppInternals.isEshopInstalled==null){ req.__myAppInternals.isEshopInstalled=true req.__myAppInternals.paths.push(`<script src="/myshop.js"></script>`) req.__myAppInternals.paths.push(`<script src="/myshop/register/product.js"></script>`) req.__myAppInternals.paths.push(`<link rel="stylesheet" href="/myshop/register/product.css">`) } } module.exports.use=module.exports.prepareManager module.exports.articulos=memorymanager.articulos module.exports.articuloByUrl=memorymanager.articuloByUrl module.exports.imagenesDelProducto=memorymanager.imagenesDelProducto module.exports.caracteristicasDeArticulo=memorymanager.caracteristicasDeArticulo module.exports.estandaresDeArticulo=memorymanager.estandaresDeArticulo module.exports.q=memorymanager module.exports.inventarios=function(productos,renderObject,fieldName,promesas){ promesas.push(new Promise(function(accept,reject){ var pool=plxdcma_standarinit.pool pool.query(`select product,inventario from productos_estandares where product in(${productos})`,function(erx,rxz){ renderObject[fieldName]=rxz accept() }) })) } module.exports.updateProduct=function(producto){ return new Promise(function(accept,reject){ var o={ nombre:producto.nombre, descripcion:producto.descripcion } var o=memorymanager.memories.articulos.objects.allObjects[producto.id] if(o != null){ o.nombre=producto.nombre o.descripcion=producto.descripcion } var pool=plxdcma_standarinit.pool pool.query(`update productos set ? where id = ${producto.id}`,o,function(e,r){ if(e != null){ console.log(`Error`) console.log(e) } accept() }) }) } module.exports.updateProductStandares=function(producto,estandares,req){ return new Promise(function(resolve,reject){ var pool=plxdcma_standarinit.pool var o=memorymanager.memories.articulos.estandares.allObjects[producto.id] var inserts=[] var productid=producto if(producto.id != null){ productid= producto.id } var subpromesas=[] var arz=[] var wordsinsidetext=[] var wordsids=[] var perfilId; var defaultStandares=null if(req != null){ var usob=plxsessions.usuarioEn(req) if(usob != null){ perfilId=usob.perfil.id var s=usob.usuariosDefaultStandares if(s != null){ defaultStandares=s for(var each in s){ var so=s[each] wordsinsidetext.push(so.texto) wordsids.push(so.id) } }else{ usob.usuariosDefaultStandares=[] defaultStandares=usob.usuariosDefaultStandares } } } var allPromises=[] var xz=-1 for(var each in estandares.inserts){ xz=xz+1 var object=estandares.objects[xz] var insert=estandares.inserts[each] //inserts.push([productid,caracteristics[each]]) var position=wordsinsidetext.indexOf(insert[3]) if(position == -1){ allPromises.push(new Promise(function(resolve2,reject2){ pool.query(`insert into productos_perfil_regproducts_standaroptions(perfil,texto) value (${perfilId},'${insert[3]}') `,function(e,r){ if(e != null){ console.log(e) } defaultStandares.push({ texto:this.ar[3], id:r.insertId }) this.ar[3]=r.insertId resolve2() }.bind({ar:insert,obj:object})) })) }else{ insert[3]=wordsids[position] } } Promise.all(allPromises).then(function(){ memorymanager.memories.articulos.estandares.allObjects[producto.id]=estandares.objects pool.query(`delete from productos_estandares where product = ${productid}`,function(e,r){ pool.query(`insert into productos_estandares(product,precio,inventario,texto,moneda) values ?`,[estandares.inserts],function(e){ if(e != null){ console.log(e) } resolve() }) }) }) }) } module.exports.updateProductCaracteristics=function(producto,caracteristics){ return new Promise(function(resolve,reject){ var o=memorymanager.memories.articulos.caracteristics.allObjects[producto.id] var inserts=[] var productid=producto if(producto.id != null){ productid= producto.id } var arz=[] for(var each in caracteristics){ var c=caracteristics[each] inserts.push([productid,caracteristics[each]]) arz.push({ product:productid, caracteristics:c }) } pool=plxdcma_standarinit.pool memorymanager.memories.articulos.caracteristics.allObjects[producto.id]=arz pool.query(`delete from productos_caracteristicas where product = ${productid}`,function(e,r){ pool.query(`insert into productos_caracteristicas(product,caracteristics) values ?`,[inserts],function(){ resolve() }) }) }) } module.exports.focusProduct=function(item,req,res){ var userinsession=plxsessions.usuarioEn(req,res) if(userinsession.myshop == null){ userinsession.myshop={} } userinsession.myshop.previewProduct=item } module.exports.addImagenAlProducto=memorymanager.addImagenAlProducto module.exports.preciosDeArticulos=memorymanager.preciosDeArticulos module.exports.productPreview=memorymanager.productPreview var paypalinterface=require(`plxdcma_paypalinterface`) function returnAllIntoInventario(pid,conclusion){ var pool=plxdcma_standarinit.pool pool.query(`select * from shopcart_inventariotempcounter where shopcart = ${pid}`,function(e,rx){ var p=[] for(var each in rx){ p.push(new Promise(function(resolve,reject){ var da=rx[each] pool.query(`update productos_estandares set inventario = inventario + ${da.cuantity} where id = ${da.standar}`,function(){ resolve() }) })) } Promise.all(p).then(function(){ pool.query(`delete from shopcart_inventariotempcounter where shopcart = ${pid}`,function(){ conclusion() }) }) }) } function moveInventarioOfShopCartIntoTemp(shopcartid,items,conclusion){ var inserts=[] var querytoupdates=[] for(var each in items){ var item=items[each] inserts.push([shopcartid,item.standarId,item.quantity]) querytoupdates.push(new Promise(function(accept,reject){ pool.query(`update productos_estandares set inventario = inventario - ${item.quantity} where id = ${item.standarId}`,function(e){ accept() }) })) } querytoupdates.push(new Promise(function(accept,reject){ pool.query(`insert into shopcart_inventariotempcounter(shopcart,standar,cuantity) values ? `,[inserts],function(){ accept() }) })) Promise.all(querytoupdates).then(function(){ conclusion() }) } module.exports.payWithPaypal=function(emisorid,descripcion,dirrecionId,handler){ module.exports.payWithPaypalAppUrl(null,emisorid,descripcion,dirrecionId,handler) } module.exports.payWithPaypalAppUrl=function(accessinterf,emisorid,descripcion,dirrecionId,handler){ pool=plxdcma_standarinit.pool var shopcartid=emisorid pool.query(`select pe.id as standarId,p.nombre as name,pe.precio as price,p.shop,shpc.cantidad as quantity,pe.inventario,001 as sku,pe.id,moneda as currency from shopingcart as shpc inner join productos_estandares as pe on pe.id = shpc.standar inner join productos as p on p.id = pe.product where shpc.perfil = ${emisorid}`,function(er,result){ var total=0 var currency="" var shop; for(var each in result){ var rx=result[each] if(rx.quantity > rx.inventario){ handler({state:0,msg:"notenough"}) return } shop=rx.shop delete rx.shop delete rx.inventario; total=total+(rx.price * rx.quantity) currency=rx.currency if(currency == "USD"){ var s=`${rx.price}` if(s.split("").indexOf(".") == -1){ rx.price=`${rx.price}.00` } } //delete rx.currency delete rx.id } if(currency == "USD"){ var s=`${total}` if(s.split("").indexOf(".") == -1){ total=`${total}.00` } } var amount={ currency:currency, total:total } /* result=[{ "name": "Red Sox Hat", "sku": "001", "price": "25.00", "currency": "USD", "quantity": 1 }] amount={ "currency": "USD", "total": "25.00" } */ moveInventarioOfShopCartIntoTemp(shopcartid,result,function(){ for(var each in result){ delete result[each].standarId } paypalinterface.pay(accessinterf,result,amount,descripcion,emisorid,shop,dirrecionId,function(linkhreftopayment,paypaltransctionid,iteminserted){ pool.query(`insert into paypaltransactionid_shopingcart(id_,_id)value(${paypaltransctionid},${shopcartid})`,function(){ handler(linkhreftopayment,paypaltransctionid,iteminserted) }) }) }) }) } function buildNewFactura(perfilId,completOrderId,shop,shopProducts,ubicaicon){ return new Promise(function(resolve,reject){ var insertsproducts=[] for(var each in shopProducts){ var p=shopProducts[each] insertsproducts.push([null,p.standar,p.precio,p.moneda,p.cantidad]) } var url=urlgen() pool.query(`insert into facturas(url,fecha,seller,buyer,dirrecion,state)value('${url}',now(),${shop},${perfilId},${ubicaicon},0)`,function(er,r){ if(er != null){ console.log(er) } var facturaid=r.insertId for(var each in insertsproducts){ var ins=insertsproducts[each] ins[0]=facturaid } pool.query(`insert into facturas_productos(factura,standar,precio,moneda,cantidad) values ? `,[insertsproducts],function(er,result){ if(er != null){ console.log(er) } resolve({id:facturaid,url:url}) }) }) }) } module.exports.installPaypal=function(isLive,yourclientid,yoursecretkey,onSuccess,onCancel){ var successFunction=function(req, res,fresultId,transactionsInnerDeailts){ var rx=transactionsInnerDeailts var shopcartid; var userperfilid=transactionsInnerDeailts.emisor var buyloction=transactionsInnerDeailts.dirrecion //var buyloction=userinsession.perfil.locationforcurrentshopcart plxsessions.allSessionsObjects(function(o){ if( o.perfil != null && o.perfil.id == userperfilid){ plxsessions.assignSession(o,req,res) return false } return true }) pool.query(`select s.standar,s.cantidad,ps.precio,ps.moneda,ps.inventario,p.shop from shopingcart as s inner join productos_estandares as ps on ps.id = s.standar inner join productos as p on p.id = ps.product where s.perfil = ${userperfilid}`,function(er,shopcartitems){ if(er != null){ console.log(`Er C`) console.log(er) } pool.query(`select * from localizaciones where id = (select lastlocationselected from perfil where id = ${userperfilid})`,function(erx,ubicaiconqrsult){ if(er != null){ console.log(`Er C`) console.log(erx) } var ubicaicon=ubicaiconqrsult[0].id var standares=[] var failedCantidades=[] var promises=[] // for(var each in shopcartitems){ // // promises.push(new Promise(function(resolve,reject){ // var s=shopcartitems[each] // pool.query(`update productos_estandares set inventario = inventario - ${s.cantidad} where id = ${s.standar}`,function(er,result){ // resolve() // }) // })) // } Promise.all(promises).then(function(){ var shops=[] var orders=[] for(var each in shopcartitems){ var s=shopcartitems[each] var position=shops.indexOf(s.shop) if( position == -1){ position=shops.length shops.push(s.shop) orders.push([]) } orders[position].push(s) } var url=urlgen().toLowerCase() pool.query(`insert into completeorders(url)value('${url}')`,function(er,r){ var subromesas=[] for(var i = 0 ; i < shops.length;i++){ subromesas.push(buildNewFactura(userperfilid,r.insertId,shops[i],orders[i],ubicaicon)) } Promise.all(subromesas).then(function(facturas){ pool.query(`delete from shopingcart where perfil = ${userperfilid}`,function(){ pool.query(`delete from shopcart_inventariotempcounter where shopcart = ${userperfilid}`,function(){ isBusy=false onSuccess(req,res,transactionsInnerDeailts,shops) }) }) }) }) }) }) }) } var cancelFunction=function(transactionsInnerDeailts,req,res){ var userperfilid=transactionsInnerDeailts.emisor plxsessions.allSessionsObjects(function(o){ if( o.perfil != null && o.perfil.id == userperfilid){ plxsessions.assignSession(o,req,res) return false } return true }) returnAllIntoInventario(transactionsInnerDeailts.emisor,function(){ pool.query(`select url from shop_defaultglobals where id = ${transactionsInnerDeailts.shop} `,function(e,r){ transactionsInnerDeailts.shopUrl=r[0].url onCancel(transactionsInnerDeailts,req,res) }) }) } if(isLive == "sandbox"){ paypalinterface.asSandBox(yourclientid,yoursecretkey,successFunction,cancelFunction) }else{ paypalinterface.asProduction(yourclientid,yoursecretkey,successFunction,cancelFunction) } } //--