From 0b4203067a8097ebdf67b265a5206d467e438fd9 Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Tue, 30 Mar 2021 02:23:38 +0200 Subject: [PATCH] ECommerce Ordini Email 1 --- emails/ecommerce/makeorder/it/html.pug | 120 ++++++++++++++++++++++ emails/ecommerce/makeorder/it/subject.pug | 1 + emails/newsletter/it/html.pug | 2 +- sass/basic.scss | 4 + src/server/models/mypage.js | 6 ++ src/server/models/orderscart.js | 11 +- src/server/models/project.js | 3 + src/server/models/todo.js | 3 + src/server/router/cart_router.js | 27 +++-- src/server/router/index_router.js | 2 +- src/server/router/orders_router.js | 2 +- src/server/sendemail.js | 33 +++++- src/server/tools/general.js | 2 +- 13 files changed, 202 insertions(+), 14 deletions(-) create mode 100755 emails/ecommerce/makeorder/it/html.pug create mode 100755 emails/ecommerce/makeorder/it/subject.pug diff --git a/emails/ecommerce/makeorder/it/html.pug b/emails/ecommerce/makeorder/it/html.pug new file mode 100755 index 0000000..692d9ba --- /dev/null +++ b/emails/ecommerce/makeorder/it/html.pug @@ -0,0 +1,120 @@ +doctype html +html + head + title Ordine Effettuato + + //- import css/scss stylesheets + //- these file names will be replace by gulp with proper css file paths + link(rel="stylesheet", href="../sass/basic.scss") + link(rel="stylesheet", href="../sass/one/styles.scss") + + //- embdedded css allowed, but not sass + style. + .red { + background-color: #E84C50; + } + + .full-width { + width: 100%; + } + + body(yahoofix, style="background: #ffffff") + - var baseimg = baseurl + '/statics/' + span(id='body_style', style='display:block') + table(cellpadding="10", cellspacing="0", width="600", align="center") + tr + td(class="whitespace", height="10") + p   + tr + td(class="emailContainer", valign="top") + + p Ciao #{name}, + p Ti confermiamo che hai appena inviato un'ordine di prenotazione dei seguenti prodotti: + + tr + td(class="whitespace", height="10") + p   + + - var totalPrice = orders.totalPrice + - var index = 0 + + each product in orders.items + - var descr = product._doc.order.product.name + - var img = product._doc.order.product.img + - var price = product._doc.order.price + - var qty = product._doc.order.quantity + - index = index + 1 + + table(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center") + tr + td(class="column", valign="center" width="40") + p.boldhigh #{index}. + + td(class="column sectionArticleImage", valign="top" width="150") + table(cellpadding="0", cellspacing="0", summary="", border="0") + tr + td + img(src=baseimg + img, alt="", width="150" height="150") + td(class="column", valign="top") + + table(cellpadding="0", cellspacing="0", summary="", border="0") + tr + td(class="sectionContentTitle boldhigh", valign="top") + p #{descr} + tr + td(class="sectionContent", valign="top") + p Prezzo: #{price} € + tr + td(class="sectionContent", valign="top") + p Quantità: #{qty} + + p.sectionContentTitle.boldhigh.sectionTotal Totale Ordine: #{totalPrice} € + + + p Ti arriverà una email quando i prodotti saranno disponibili per poterli venire a ritirare. + p Il pagamento potrai farlo direttamente in sede. + p Grazie Mille + p + + table.footer(cellpadding="0", cellspacing="0", width="100%", summary="", border="0", align="center") + tr + td(class="whitespace", height="10") + p   + tr + td.firma + p!= dataemail.firma + + tr + td.disclaimer + p!= dataemail.disclaimer_out + + tr + td.bottom + p!= dataemail.disc_bottom_out + + tr + td(class="whitespace", height="10") + p   + +style(type="text/css"). + html, body { + padding: 0; + margin: 0; + } + + .divbtn { + display: flex; + align-items: center; + justify-content: center; + } + + .btn-lg { + padding: 5px; + margin: 5px; + font-size: 26px; + cursor: pointer; + color: white; + background: #027be3 !important; + border-radius: 28px; + + } diff --git a/emails/ecommerce/makeorder/it/subject.pug b/emails/ecommerce/makeorder/it/subject.pug new file mode 100755 index 0000000..47ad7e2 --- /dev/null +++ b/emails/ecommerce/makeorder/it/subject.pug @@ -0,0 +1 @@ +=`Ordine n. ${ordernumber} effettuato` diff --git a/emails/newsletter/it/html.pug b/emails/newsletter/it/html.pug index c2fbd31..92472d1 100755 --- a/emails/newsletter/it/html.pug +++ b/emails/newsletter/it/html.pug @@ -19,7 +19,7 @@ doctype html html head - title One | Email template! + title Calendario Eventi //- import css/scss stylesheets //- these file names will be replace by gulp with proper css file paths diff --git a/sass/basic.scss b/sass/basic.scss index 68b48a2..fce0a35 100755 --- a/sass/basic.scss +++ b/sass/basic.scss @@ -208,6 +208,10 @@ p { padding: 0px 0px 5px 0; } +.sectionTotal { + text-align: right; +} + .sectionContentSubTitle { font-size: 12px; color: #0000ff; diff --git a/src/server/models/mypage.js b/src/server/models/mypage.js index 9043d81..084eb9b 100755 --- a/src/server/models/mypage.js +++ b/src/server/models/mypage.js @@ -47,6 +47,12 @@ const MyPageSchema = new Schema({ onlyif_logged: { type: Boolean, }, + only_residenti: { + type: Boolean, + }, + color: { + type: String, + }, imgback: { type: String, }, diff --git a/src/server/models/orderscart.js b/src/server/models/orderscart.js index ee71fd1..d7c067f 100755 --- a/src/server/models/orderscart.js +++ b/src/server/models/orderscart.js @@ -55,7 +55,7 @@ module.exports.executeQueryTable = function (idapp, params) { }; module.exports.getFieldsForSearch = function () { - return [{field: 'note', type: tools.FieldType.string}] + return [{ field: 'note', type: tools.FieldType.string }] }; @@ -78,9 +78,14 @@ module.exports.getNewNumOrder = async function (uid, idapp) { }; -module.exports.getOrdersCartByUserId = async function (uid, idapp) { +module.exports.getOrdersCartByUserId = async function (uid, idapp, numorder) { let query = { userId: uid, idapp, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } } - const myorderscart = await OrdersCart.find(query); + let myorderscart = null; + if (numorder > 0) { + query = { userId: uid, idapp, numorder, status: { $gte: shared_consts.OrderStatus.CHECKOUT_SENT } } + } + + myorderscart = await OrdersCart.find(query); for (let ind = 0; ind < myorderscart.length; ind++) { for (const idkey in myorderscart[ind].items) { diff --git a/src/server/models/project.js b/src/server/models/project.js index f122c24..13748fd 100755 --- a/src/server/models/project.js +++ b/src/server/models/project.js @@ -51,6 +51,9 @@ var ProjectSchema = new mongoose.Schema({ viceRespUsername: { type: String, }, + vice2RespUsername: { + type: String, + }, statusproj: { type: Number, default: 0 diff --git a/src/server/models/todo.js b/src/server/models/todo.js index 414c24e..a8255b1 100755 --- a/src/server/models/todo.js +++ b/src/server/models/todo.js @@ -31,6 +31,9 @@ var TodoSchema = new mongoose.Schema({ descr: { type: String, }, + note: { + type: String, + }, priority: { type: Number, }, diff --git a/src/server/router/cart_router.js b/src/server/router/cart_router.js index 21512dc..02a0f97 100755 --- a/src/server/router/cart_router.js +++ b/src/server/router/cart_router.js @@ -3,6 +3,7 @@ const shared_consts = require('../tools/shared_nodejs'); const express = require('express'); const router = express.Router(); +const sendemail = require('../sendemail'); const tools = require('../tools/general'); var server_constants = require('../tools/server_constants'); @@ -174,13 +175,15 @@ router.post('/:userId/cartstatus', authenticate, async function (req, res, next) let idapp = req.body.idapp; let userId = req.params.userId; let cart_id = req.body.cart_id; + const user = req.user; let status = req.body.status; const mycart = await Cart.getCartByUserId(userId, idapp); + const numorder = await OrdersCart.getNewNumOrder(userId, idapp); try { if (!!mycart) { - if (status === shared_consts.OrderStatus.CHECKOUT_CONFIRMED) { + if (status === shared_consts.OrderStatus.CHECKOUT_SENT) { // Porta tutto il Cart nell'Ordine const newOrderCart = new OrdersCart({ idapp, @@ -190,25 +193,35 @@ router.post('/:userId/cartstatus', authenticate, async function (req, res, next) userId, status, note: mycart.note, - numorder: await OrdersCart.getNewNumOrder(userId, idapp), + numorder, created_at: new Date(), modify_at: new Date(), }) - const myorderlist = OrdersCart.updateOrdersCartById(-1, newOrderCart, function (err, ris) { + return OrdersCart.updateOrdersCartById(-1, newOrderCart, function (err, ris) { //if (err) return next(err) if (err) return res.send({ code: server_constants.RIS_CODE_ERR, status: 0 }); else { const myris = ris; // Cancella il Cart appena salvato in OrdersCart + Cart.deleteCartByCartId(mycart.id) .then((ris) => { - const orders = OrdersCart.getOrdersCartByUserId(userId, idapp) + + const orders = OrdersCart.getOrdersCartByUserId(userId, idapp, numorder) .then((orders) => { - return res.send({ code: server_constants.RIS_CODE_OK, status: myris.status, orders }); + if (!!orders) { + sendemail.sendEmail_OrderProduct(user.lang, idapp, orders[0], user) + .then((ris) => { + return res.send({ + code: server_constants.RIS_CODE_OK, + status: myris.status, + orders: orders[0] + }); + }); + } }); }) - } }) @@ -227,6 +240,8 @@ router.post('/:userId/cartstatus', authenticate, async function (req, res, next) }) */ } + + return res.send({ code: server_constants.RIS_CODE_ERR, status: 0 }); } } catch (e) { return res.send({ code: server_constants.RIS_CODE_ERR, status: 0 }); diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 2f78477..268077d 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -1157,7 +1157,7 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) => if (req.user) { calcstat = User.calculateStat(idapp, req.user.username); cart = Cart.getCartByUserId(req.user.id, idapp); - orderscart = OrdersCart.getOrdersCartByUserId(req.user.id, idapp); + orderscart = OrdersCart.getOrdersCartByUserId(req.user.id, idapp, 0); } diff --git a/src/server/router/orders_router.js b/src/server/router/orders_router.js index 3002941..d0a9f8b 100755 --- a/src/server/router/orders_router.js +++ b/src/server/router/orders_router.js @@ -30,7 +30,7 @@ const OrdersCart = require('../models/orderscart'); router.get('/:userId', authenticate, function (req, res, next) { let userId = req.body.userId let idapp = req.body.idapp - OrdersCart.getOrdersCartByUserId(userId, idapp, function (err, cart) { + OrdersCart.getOrdersCartByUserId(userId, idapp, 0, function (err, cart) { if (err) return next(err) if (cart) diff --git a/src/server/sendemail.js b/src/server/sendemail.js index ed7ba15..9eba5d5 100755 --- a/src/server/sendemail.js +++ b/src/server/sendemail.js @@ -15,6 +15,8 @@ const { Discipline } = require('./models/discipline'); const previewEmail = require('preview-email'); const nodemailer = require("nodemailer"); +const OrdersCart = require('./models/orderscart'); + const { MyEvent } = require('./models/myevent'); const { MailingList } = require('./models/mailinglist'); const { Newstosent } = require('./models/newstosent'); @@ -552,7 +554,36 @@ module.exports = { return smtpTransport; }, - sendEmail_Newsletter_Events: async function (lang, idapp, id_newstosent) { + sendEmail_OrderProduct: async function (lang, idapp, orders, user) { + + const msginizio = 'INIZIO - sendEmail_OrderProduct: ' + tools.getNomeAppByIdApp(idapp); + console.log(msginizio); + + await telegrambot.sendMsgTelegramToTheManagers(idapp, msginizio); + + mylocalsconf = { + idapp, + locale: lang, + nomeapp: tools.getNomeAppByIdApp(idapp), + orders, + baseurl: tools.getHostByIdApp(idapp), + dataemail: await this.getdataemail(idapp), + ordernumber: orders.numorder, + user + }; + + mylocalsconf.name = user.name; + mylocalsconf.surname = user.surname; + mylocalsconf.emailto = user.email; + mylocalsconf.hashemail = tools.getHash(user.email); + + mylocalsconf = this.replacefields(mylocalsconf); + + const esito = this.sendEmail_base('ecommerce/makeorder/' + lang, mylocalsconf.emailto, mylocalsconf, mylocalsconf.dataemail.email_reply); + + }, + + sendEmail_Newsletter_Events: async function (lang, idapp, id_newstosent) { const msginizio = 'INIZIO - sendEmail_Newsletter_Events: ' + tools.getNomeAppByIdApp(idapp); console.log(msginizio); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 2d21f24..2f95749 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -617,7 +617,7 @@ module.exports = { }, allfieldTodo: function () { - return ['userId', 'pos', 'category', 'descr', 'priority', 'statustodo', 'assignedToUsers', 'created_at', 'groupId', 'modify_at', + return ['userId', 'pos', 'category', 'descr', 'note', 'priority', 'statustodo', 'assignedToUsers', 'created_at', 'groupId', 'modify_at', 'completed_at', 'expiring_at', 'enableExpiring', 'progress', 'modified', 'phase', 'assigned_to_userId', 'assignedToUsers', 'hoursplanned', 'hoursworked', 'start_date', 'themecolor', 'themebgcolor'] },