package service

import (
	"XT_New/models"
	"github.com/jinzhu/gorm"
	"strconv"
)

func GetInvoiceByOrderId(orgId int64, orderID int64) (*models.ServeInvoice, error) {
	var invoice models.ServeInvoice
	orderLike := "%," + strconv.FormatInt(orderID, 10) + ",%"
	err := readUserDb.Model(&models.ServeInvoice{}).Where("org_id=? and orders LIKE ?", orgId, orderLike).First(&invoice).Error
	if err == gorm.ErrRecordNotFound {
		return nil, nil
	}
	if err != nil {
		return nil, err
	}

	return &invoice, nil
}

func CreateInvoice(m *models.ServeInvoice) error {
	err := writeUserDb.Create(m).Error
	return err
}
func FindUnInvoiceOrders(orgID int64) (list []*models.ServeOrder, err error) {
	// 这一段是查询出还没有开票的订单
	// SELECT so.* from sgj_users.sgj_serve_order as so WHERE NOT EXISTS
	// (select o.id
	// from sgj_users.sgj_serve_order as o
	// JOIN sgj_users.sgj_serve_invoice as i ON  FIND_IN_SET(o.id, i.orders)
	// WHERE o.org_id=13 and o.order_status=2 and o.status=1 and so.id=o.id )

	err = readUserDb.Table("sgj_serve_order as so").Where("so.org_id=? and so.order_status=2 and so.status=1", orgID).Where("NOT EXISTS (?)", readUserDb.Table("sgj_serve_order as o").Joins("JOIN sgj_serve_invoice as i ON FIND_IN_SET(o.id, i.orders)").Where("o.org_id=? and o.order_status=2 and o.status=1 and i.status=1 and so.id=o.id", orgID).Select("o.id").QueryExpr()).Find(&list).Error
	return

}

func FindInvoices(orgID int64) (list []*models.ServeInvoice, err error) {
	err = readUserDb.Model(&models.ServeInvoice{}).Where("org_id=? and status=1", orgID).Find(&list).Error
	return
}
func FindServeOrdersByIDs(orgId int64, ids []int64) (hads []*models.ServeOrder, nos []*models.ServeOrder, err error) {

	err = readUserDb.Table("sgj_serve_order as so").Where("so.id IN (?) and so.org_id=? and so.order_status=2 and so.status=1", ids, orgId).Where("EXISTS (?)", readUserDb.Table("sgj_serve_order as o").Joins("JOIN sgj_serve_invoice as i ON FIND_IN_SET(o.id, i.orders)").Where("so.id IN (?) and o.org_id=? and o.order_status=2 and o.status=1 and i.status=1 and so.id=o.id", ids, orgId).Select("o.id").QueryExpr()).Find(&hads).Error
	if err != nil {
		return
	}
	err = readUserDb.Table("sgj_serve_order as so").Where("so.id  IN (?) and so.org_id=? and so.order_status=2 and so.status=1", ids, orgId).Where("NOT EXISTS (?)", readUserDb.Table("sgj_serve_order as o").Joins("JOIN sgj_serve_invoice as i ON FIND_IN_SET(o.id, i.orders)").Where("so.id IN (?) and o.org_id=? and o.order_status=2 and o.status=1 and i.status=1 and so.id=o.id", ids, orgId).Select("o.id").QueryExpr()).Find(&nos).Error
	if err != nil {
		return
	}
	return
}