All files / platform/modules/sale-report/src/Controllers/Http BookingSalonSaleReportController.js

100% Statements 22/22
100% Branches 0/0
100% Functions 3/3
100% Lines 22/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106    1x   1x 1x 1x       1x             1x 1x                                                                               1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   1x                             1x                             1x       1x  
'use strict';
 
const _ = require('lodash');
 
const Config = use('Config');
const configs = Config.get('modules.saleReport.general');
const namespace = configs.namespace;
 
class BookingSalonSaleReportController {
  static get inject() {
    return [
      `${namespace}/Services/BookingStaffSaleReportService`,
      `${namespace}/Services/StaffService`,
    ];
  }
 
  constructor(bookingStaffSaleReportService, staffService) {
    this.bookingStaffSaleReportService = bookingStaffSaleReportService;
    this.staffService = staffService;
  }
 
  /**
   * @swagger
   *
   * /api/v1/sale-reports/salons/{salonId}/bookings:
   *   get:
   *     tags:
   *       - sale-reports
   *     operationId: 'getListBookingSalonSaleReport'
   *     summary: 'getListBookingSalonSaleReport'
   *     description: 'get list salon booking sale reports'
   *     parameters:
   *       - $ref: '#/components/parameters/SalonIdParam'
   *       - $ref: '#/components/parameters/PageParam'
   *       - $ref: '#/components/parameters/LimitParam'
   *       - $ref: '#/components/parameters/StatusParam'
   *       - $ref: '#/components/parameters/SortParam'
   *       - $ref: '#/components/parameters/FromParam'
   *       - $ref: '#/components/parameters/ToParam'
   *       - $ref: '#/components/parameters/KeywordParam'
   *       - $ref: '#/components/parameters/TargetSystemStatusParam'
   *       - $ref: '#/components/parameters/PaymentMethodParam'
   *     responses:
   *       200:
   *         description: ok
   *         content:
   *           application/json; charset=utf-8:
   *             schema:
   *               $ref: '#/components/schemas/StaffBookingSaleReportPaginationResponse'
   *       401:
   *         $ref: '#/components/responses/Unauthorized'
   *       403:
   *         $ref: '#/components/responses/Forbidden'
   *     deprecated: false
   *     security:
   *      - BearerAuth: []
   */
  async index({ request, response, transform }) {
    const page = request.input('page', 1);
    const limit = request.input('limit', 20);
    const sort = request.input('sort');
    const from = request.input('from');
    const to = request.input('to');
    const status = request.input('status');
    const targetSystemStatus = request.input('targetSystemStatus');
    const paymentMethod = request.input('paymentMethod');
    const keyword = request.input('keyword', '');
    const user = request.user;
    const salonId = _.get(user, 'userMetadata.salonId');
 
    const saleReports = await this.bookingStaffSaleReportService.paginateBy(
      {
        salonId: salonId,
        status,
        sort,
        from,
        to,
        keyword,
        targetSystemStatus,
        paymentMethod,
      },
      page,
      limit,
    );
 
    const transformed = await transform
      .include(
        [
          'period',
          'booking',
          'booking.customer',
          'booking.notes',
          'booking.paymentMethod',
          'booking.currency',
          'booking.orders',
          'staff',
          'staff.connections',
        ].join(','),
      )
      .paginate(saleReports, 'BookingStaffSaleReportTransformer');
    return response.success(transformed, 200);
  }
}
 
module.exports = BookingSalonSaleReportController;