123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- package modules
- import (
- "context"
- "golang-fave/engine/basket"
- "golang-fave/engine/consts"
- "golang-fave/engine/utils"
- "golang-fave/engine/wrapper"
- )
- func (this *Modules) RegisterAction_ShopOrder() *Action {
- return this.newAction(AInfo{
- Mount: "shop-order",
- WantAdmin: false,
- }, func(wrap *wrapper.Wrapper) {
- if (*wrap.Config).Shop.Orders.Enabled <= 0 {
- wrap.Write(`{"error": true, "variable": "ShopOrderErrorDisabled"}`)
- return
- }
- if wrap.ShopBasket.ProductsCount(&basket.SBParam{
- R: wrap.R,
- DB: wrap.DB,
- Host: wrap.CurrHost,
- Config: wrap.Config,
- SessionId: wrap.GetSessionId(),
- }) <= 0 {
- wrap.Write(`{"error": true, "variable": "ShopOrderErrorBasketEmpty"}`)
- return
- }
- pf_client_last_name := utils.Trim(wrap.R.FormValue("client_last_name"))
- pf_client_first_name := utils.Trim(wrap.R.FormValue("client_first_name"))
- pf_client_middle_name := utils.Trim(wrap.R.FormValue("client_middle_name"))
- pf_client_phone := utils.Trim(wrap.R.FormValue("client_phone"))
- pf_client_email := utils.Trim(wrap.R.FormValue("client_email"))
- pf_client_delivery_comment := utils.Trim(wrap.R.FormValue("client_delivery_comment"))
- pf_client_order_comment := utils.Trim(wrap.R.FormValue("client_order_comment"))
- if (*wrap.Config).Shop.Orders.RequiredFields.LastName != 0 {
- if pf_client_last_name == "" {
- wrap.Write(`{"error": true, "field": "client_last_name", "variable": "ShopOrderEmptyLastName"}`)
- return
- }
- }
- if (*wrap.Config).Shop.Orders.RequiredFields.FirstName != 0 {
- if pf_client_first_name == "" {
- wrap.Write(`{"error": true, "field": "client_first_name", "variable": "ShopOrderEmptyFirstName"}`)
- return
- }
- }
- if (*wrap.Config).Shop.Orders.RequiredFields.MiddleName != 0 {
- if pf_client_middle_name == "" {
- wrap.Write(`{"error": true, "field": "client_middle_name", "variable": "ShopOrderEmptyMiddleName"}`)
- return
- }
- }
- if (*wrap.Config).Shop.Orders.RequiredFields.MobilePhone != 0 {
- if pf_client_phone == "" {
- wrap.Write(`{"error": true, "field": "client_phone", "variable": "ShopOrderEmptyMobilePhone"}`)
- return
- }
- if !utils.IsValidMobile(pf_client_phone) {
- wrap.Write(`{"error": true, "field": "client_phone", "variable": "ShopOrderNotCorrectMobilePhone"}`)
- return
- }
- }
- if (*wrap.Config).Shop.Orders.RequiredFields.EmailAddress != 0 {
- if pf_client_email == "" {
- wrap.Write(`{"error": true, "field": "client_email", "variable": "ShopOrderEmptyEmailAddress"}`)
- return
- }
- if !utils.IsValidEmail(pf_client_email) {
- wrap.Write(`{"error": true, "field": "client_email", "variable": "ShopOrderNotCorrectEmailAddress"}`)
- return
- }
- }
- if (*wrap.Config).Shop.Orders.RequiredFields.Delivery != 0 {
- if pf_client_delivery_comment == "" {
- wrap.Write(`{"error": true, "field": "client_delivery_comment", "variable": "ShopOrderEmptyDelivery"}`)
- return
- }
- }
- if (*wrap.Config).Shop.Orders.RequiredFields.Comment != 0 {
- if pf_client_order_comment == "" {
- wrap.Write(`{"error": true, "field": "client_order_comment", "variable": "ShopOrderEmptyComment"}`)
- return
- }
- }
- bdata := wrap.ShopBasket.GetAll(&basket.SBParam{
- R: wrap.R,
- DB: wrap.DB,
- Host: wrap.CurrHost,
- Config: wrap.Config,
- SessionId: wrap.GetSessionId(),
- })
- var lastID int64 = 0
- if err := wrap.DB.Transaction(wrap.R.Context(), func(ctx context.Context, tx *wrapper.Tx) error {
- // Insert row
- res, err := tx.Exec(
- ctx,
- `INSERT INTO fave_shop_orders SET
- create_datetime = ?,
- update_datetime = ?,
- currency_id = ?,
- currency_name = ?,
- currency_coefficient = ?,
- currency_code = ?,
- currency_symbol = ?,
- client_last_name = ?,
- client_first_name = ?,
- client_middle_name = ?,
- client_phone = ?,
- client_email = ?,
- client_delivery_comment = ?,
- client_order_comment = ?,
- status = ?
- ;`,
- utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
- utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
- bdata.Currency.Id,
- bdata.Currency.Name,
- bdata.Currency.Coefficient,
- bdata.Currency.Code,
- bdata.Currency.Symbol,
- pf_client_last_name,
- pf_client_first_name,
- pf_client_middle_name,
- pf_client_phone,
- pf_client_email,
- pf_client_delivery_comment,
- pf_client_order_comment,
- 0,
- )
- if err != nil {
- return err
- }
- // Get inserted order id
- lastID, err = res.LastInsertId()
- if err != nil {
- return err
- }
- // Insert order products
- for _, product := range *(*bdata).Products {
- if _, err = tx.Exec(
- ctx,
- `INSERT INTO fave_shop_order_products (id, order_id, product_id, price, quantity) VALUES (NULL, ?, ?, ?, ?);`,
- lastID, product.A_product_id, product.A_price, product.A_quantity,
- ); err != nil {
- return err
- }
- }
- // Send notify email to owner
- if (*wrap.Config).Shop.Orders.NotifyEmail != "" {
- if err := wrap.SendEmailTemplated(
- (*wrap.Config).Shop.Orders.NotifyEmail,
- (*wrap.Config).Shop.Orders.NewOrderEmailThemeCp+" #"+utils.Int64ToStr(lastID)+" ("+wrap.Host+":"+wrap.Port+")",
- "email-new-order-admin",
- consts.TmplEmailOrder{
- Basket: bdata,
- Client: consts.TmplOrderClient{
- LastName: pf_client_last_name,
- FirstName: pf_client_first_name,
- MiddleName: pf_client_middle_name,
- Phone: pf_client_phone,
- Email: pf_client_email,
- DeliveryComment: pf_client_delivery_comment,
- OrderComment: pf_client_order_comment,
- },
- Else: consts.TmplOrderElse{
- OrderId: lastID,
- Subject: (*wrap.Config).Shop.Orders.NewOrderEmailThemeCp + " #" + utils.Int64ToStr(lastID) + " (" + wrap.Host + ":" + wrap.Port + ")",
- CpOrderLink: "http://" + wrap.Host + ":" + wrap.Port + "/cp/shop/orders-modify/" + utils.Int64ToStr(lastID) + "/",
- },
- },
- ); err != nil {
- return err
- }
- }
- // Send notify email to client
- if pf_client_email != "" {
- if err := wrap.SendEmailTemplated(
- pf_client_email,
- (*wrap.Config).Shop.Orders.NewOrderEmailThemeUser+" #"+utils.Int64ToStr(lastID),
- "email-new-order-user",
- consts.TmplEmailOrder{
- Basket: bdata,
- Client: consts.TmplOrderClient{
- LastName: pf_client_last_name,
- FirstName: pf_client_first_name,
- MiddleName: pf_client_middle_name,
- Phone: pf_client_phone,
- Email: pf_client_email,
- DeliveryComment: pf_client_delivery_comment,
- OrderComment: pf_client_order_comment,
- },
- Else: consts.TmplOrderElse{
- OrderId: lastID,
- Subject: (*wrap.Config).Shop.Orders.NewOrderEmailThemeUser + " #" + utils.Int64ToStr(lastID),
- CpOrderLink: "http://" + wrap.Host + ":" + wrap.Port + "/cp/shop/orders-modify/" + utils.Int64ToStr(lastID) + "/",
- },
- },
- ); err != nil {
- return err
- }
- }
- return nil
- }); err != nil {
- wrap.Write(`{"error": true, "variable": "ShopOrderErrorSomethingWrong"}`)
- return
- }
- // Clear user basket
- wrap.ShopBasket.ClearBasket(&basket.SBParam{
- R: wrap.R,
- DB: wrap.DB,
- Host: wrap.CurrHost,
- Config: wrap.Config,
- SessionId: wrap.GetSessionId(),
- })
- wrap.Write(`{"error": false, "field": "", "variable": "ShopOrderSuccess"}`)
- return
- })
- }
|