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

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

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 107 108    1x   1x 1x 1x       2x             2x 2x                                                                               2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x   2x                               2x                             2x       1x  
'use strict';
 
const _ = require('lodash');
 
const Config = use('Config');
const configs = Config.get('modules.saleReport.general');
const namespace = configs.namespace;
 
class BookingStaffSaleReportController {
  static get inject() {
    return [
      `${namespace}/Services/BookingStaffSaleReportService`,
      `${namespace}/Services/StaffService`,
    ];
  }
 
  constructor(bookingStaffSaleReportService, staffService) {
    this.bookingStaffSaleReportService = bookingStaffSaleReportService;
    this.staffService = staffService;
  }
 
  /**
   * @swagger
   *
   * /api/v1/sale-reports/staff/{staffId}/bookings:
   *   get:
   *     tags:
   *       - sale-reports
   *     operationId: 'getListBookingStaffSaleReport'
   *     summary: 'getListBookingStaffSaleReport'
   *     description: 'get list staff booking sale reports'
   *     parameters:
   *       - $ref: '#/components/parameters/StaffIdParam'
   *       - $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 staffId = request.params.staffId;
    const user = request.user;
    const salonId = _.get(user, 'userMetadata.salonId');
 
    const saleReports = await this.bookingStaffSaleReportService.paginateBy(
      {
        staffId: staffId,
        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 = BookingStaffSaleReportController;