ECommerce Ordini Email 1

This commit is contained in:
Paolo Arena
2021-03-30 02:23:38 +02:00
parent 678d8ecd6b
commit 0b4203067a
13 changed files with 202 additions and 14 deletions

View File

@@ -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;
}

View File

@@ -0,0 +1 @@
=`Ordine n. ${ordernumber} effettuato`

View File

@@ -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

View File

@@ -208,6 +208,10 @@ p {
padding: 0px 0px 5px 0;
}
.sectionTotal {
text-align: right;
}
.sectionContentSubTitle {
font-size: 12px;
color: #0000ff;

View File

@@ -47,6 +47,12 @@ const MyPageSchema = new Schema({
onlyif_logged: {
type: Boolean,
},
only_residenti: {
type: Boolean,
},
color: {
type: String,
},
imgback: {
type: String,
},

View File

@@ -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) {

View File

@@ -51,6 +51,9 @@ var ProjectSchema = new mongoose.Schema({
viceRespUsername: {
type: String,
},
vice2RespUsername: {
type: String,
},
statusproj: {
type: Number,
default: 0

View File

@@ -31,6 +31,9 @@ var TodoSchema = new mongoose.Schema({
descr: {
type: String,
},
note: {
type: String,
},
priority: {
type: Number,
},

View File

@@ -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 });

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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);

View File

@@ -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']
},