@rsc-labs/medusa-store-analytics
Version:
Get analytics data about your store
72 lines (71 loc) • 3.79 kB
JavaScript
;
/*
* Copyright 2024 RSC-Labs, https://rsoftcon.com/
*
* MIT License
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const medusa_1 = require("@medusajs/medusa");
const pdfkit_1 = __importDefault(require("pdfkit"));
const sales_template_1 = __importDefault(require("./pdf-templates/sales-template"));
const orders_template_1 = __importDefault(require("./pdf-templates/orders-template"));
const customers_template_1 = __importDefault(require("./pdf-templates/customers-template"));
const common_1 = require("./pdf-templates/common");
const products_template_1 = __importDefault(require("./pdf-templates/products-template"));
class ReportsAnalyticsService extends medusa_1.TransactionBaseService {
constructor(container) {
super(container);
this.ordersAnalyticsService = container.ordersAnalyticsService;
this.salesAnalyticsService = container.salesAnalyticsService;
this.customersAnalyticsService = container.customersAnalyticsService;
this.productsAnalyticsService = container.productsAnalyticsService;
this.regionService = container.regionService;
}
async generateReport(orderStatuses, from, to, dateRangeFromCompareTo, dateRangeToCompareTo) {
var doc = new pdfkit_1.default();
const buffers = [];
doc.on("data", buffers.push.bind(buffers));
(0, common_1.generateReportHeader)(doc, orderStatuses, from, to, dateRangeFromCompareTo, dateRangeToCompareTo);
const regions = await this.regionService.list();
// Orders
orders_template_1.default.generateHeader(doc);
const ordersHistoryResult = await this.ordersAnalyticsService.getOrdersHistory(orderStatuses, from, to, dateRangeFromCompareTo, dateRangeToCompareTo);
orders_template_1.default.generateTable(doc, ordersHistoryResult);
// Sales
doc.addPage();
sales_template_1.default.generateHeader(doc);
for (const region of regions) {
sales_template_1.default.generateTableTitle(doc, region);
const salesAnalyticsResult = await this.salesAnalyticsService.getOrdersSales(orderStatuses, region.currency_code, from, to, dateRangeFromCompareTo, dateRangeToCompareTo);
sales_template_1.default.generateTable(doc, salesAnalyticsResult);
}
// Customers
doc.addPage();
customers_template_1.default.generateHeader(doc);
const customersHistoryResult = await this.customersAnalyticsService.getHistory(from, to, dateRangeFromCompareTo, dateRangeToCompareTo);
customers_template_1.default.generateTable(doc, customersHistoryResult);
// Products
doc.addPage();
products_template_1.default.generateHeader(doc);
const variantsCountPopularityResult = await this.productsAnalyticsService.getTopVariantsByCount(orderStatuses, from, to, dateRangeFromCompareTo, dateRangeToCompareTo);
products_template_1.default.generateTable(doc, variantsCountPopularityResult);
doc.end();
const bufferPromise = new Promise(resolve => {
doc.on("end", () => {
const pdfData = Buffer.concat(buffers);
resolve(pdfData);
});
});
return await bufferPromise;
}
}
exports.default = ReportsAnalyticsService;