coupons-model.js 5.7 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';

const getCouponsList = (uid, type, page, limit)=>{
    return co(function*() {
        let couponsInfo = yield UserData.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 (!_.isEmpty(item.sortNameLimit)) {
                    result[i].categorys = item.sortNameLimit.join('、');
                }
                if (!_.isEmpty(item.brandNameLimit)) {
                    result[i].brands = item.brandNameLimit.join('、');
                }
                if (limits.indexOf('1') >= 0) {
                    extra.push('3折以下');
                }
                if (limits.indexOf('2') >= 0) {
                    extra.push('限量');
                }

                result[i].extraPro = extra.join('、');
                result[i].isNoLimit = item.isNoLimit;
                result[i].proListUrl = helpers.urlFormat('', {cpc_id: item.couponId, 
                    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)
        };
    })();
};

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

    return co(function*() {
        let coupons = yield 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;
    })();
};

module.exports = {
    couponsData
};