coupons-model.js 5.97 KB
'use strict';


const Promise = require('bluebird');
const co = Promise.coroutine;

const UserData = require('./user-data');
const helpers = global.yoho.helpers;
const path = require('path');
const _ = require('lodash');
const moment = require('moment');

// 使用 product中的分页逻辑
const pagerPath = path.join(global.appRoot, '/apps/product/models/public-handler.js');
const pager = require(pagerPath).handlePagerData;

const UNUSED = 'notuse';
const USED = 'use';
const INVALID = 'overtime';


module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    getCouponsList(uid, type, page, limit) {
        let userDataModel = new UserData(this.ctx);

        return co(function*() {
            let couponsInfo = yield userDataModel.getCouponsList(uid, type, page, limit);
            let result = [],
                coupons = _.get(couponsInfo, 'data.couponList');

            if (!coupons) {
                return {
                    list: result
                };
            }

            if (coupons) {
                coupons.forEach(function(item, i) {
                    result[i] = {};
                    result[i].id = item.couponId;
                    result[i].code = item.couponCode;

                    // 格式化有效日期 "couponValidity": "2016.03.15-2016.03.31"
                    let dates = item.couponValidity.split('-'),
                        extra = ['秒杀', '限定', '境外', '预售'],
                        limits = _.get(item, 'shopPriceLimits', '');

                    result[i].beginTime = dates[0];
                    result[i].endTime = dates[1];

                    if (!item.couponImageUrl) {
                        result[i].img = '//static.yohobuy.com/images/v2/activity/default_coupon.jpg';
                    } else {
                        result[i].img = item.couponImageUrl;
                    }

                    result[i].value = item.couponValue;
                    result[i].validity = item.couponValidity;
                    result[i].useRemark = item.couponDetailInfomation;

                    if (limits.indexOf('1') >= 0) {
                        extra.push('3折以下');
                    }
                    if (limits.indexOf('2') >= 0) {
                        extra.push('限量');
                    }
                    result[i].notes = item.notes;
                    result[i].proListUrl = helpers.urlFormat('', {cpc_id: item.couponId, coupon_code: item.couponCode,
                        phrase: encodeURIComponent('以下商品可使用 【' + item.couponDetailInfomation + '】优惠券')}, 'list');
                    result[i].rule = item.rule4ShortName || '';
                    result[i].overState = item.overState || '';

                    if (type === USED) {
                        result[i].orderNum = _.get(item, 'orderCode', '');
                        result[i].orderDetailUrl = helpers.urlFormat('/home/orders/detail',
                            {orderCode: item.orderCode || ''});
                        result[i].orderSum = _.get(item, 'orderPrice', 0).toFixed(2);
                        result[i].payment = _.get(item, 'actuallyPaid', 0).toFixed(2);
                        let date = item.usedTime ? moment(item.usedTime).format('YYYY-MM-DD H:m') : 0;

                        if (date) {
                            result[i].useTime = date;
                        } else {
                            result[i].useTime = '';
                        }
                    } else {
                        result[i].status = item.isValidity ? '可使用' : '已过期';
                    }
                    if (item.couponType) {
                        result[i].type = item.couponType;
                        if (Number(item.couponType) === 5) {
                            result[i].value = '免邮';
                        }
                    }
                });
            }

            let pageNum = pager(couponsInfo.data.total, {
                page: page,
                limit: limit,
                type: type
            });

            return {
                list: result,
                pager: Object.assign({
                    count: couponsInfo.data.total || 0,
                    curPage: page,
                    totalPages: couponsInfo.data.totalPageNum
                }, pageNum)
            };
        })();
    }

    couponsData(uid, params) {
        let type = params.type || UNUSED;
        let page = params.page || 1;
        let limit = params.limit || 10;
        let _this = this;

        return co(function*() {
            let coupons = yield _this.getCouponsList(uid, type, page, limit);
            let data = {};

            if (type === UNUSED) {
                data.unUseCoupons = !coupons.list.length ? {empty: '您没有优惠券'} : coupons.list;
                data.unUse = true;
            } else if (type === USED) {
                data.usedCoupons = !coupons.list.length ? {empty: '您没有优惠券'} : coupons.list;
                data.used = true;
            } else if (type === INVALID) {
                data.noValidCoupons = !coupons.list.length ? {empty: '您没有优惠券'} : coupons.list;
                data.noValid = true;
            }

            data.tabs = [
                {
                    active: type === UNUSED ? true : false,
                    url: helpers.urlFormat('/home/coupons', {type: UNUSED}),
                    name: '未使用优惠券'
                },
                {
                    active: type === USED ? true : false,
                    url: helpers.urlFormat('/home/coupons', {type: USED}),
                    name: '已使用优惠券'
                },
                {
                    active: type === INVALID ? true : false,
                    url: helpers.urlFormat('/home/coupons', {type: INVALID}),
                    name: '已失效优惠券'
                }
            ];

            data.pager = coupons.pager;

            return data;
        })();
    }
};