Subversion Repositories SmartDukaan

Rev

Rev 37833 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
23755 amit.gupta 1
package com.smartdukaan.cron;
23723 amit.gupta 2
 
32782 raveendra. 3
import com.smartdukaan.cron.migrations.RunOnceTasks;
37613 amit 4
import com.smartdukaan.cron.migrations.InternalGrnTask;
37825 amit 5
import com.smartdukaan.cron.migrations.MovementBillingTask;
37827 amit 6
import com.smartdukaan.cron.migrations.MovementPoTask;
32782 raveendra. 7
import com.smartdukaan.cron.scheduled.*;
8
import com.smartdukaan.cron.scheduled.b2b.Listing;
36745 ranu 9
import com.smartdukaan.cron.scheduled.beatmiss.BeatMissDetectorRunner;
32782 raveendra. 10
import com.smartdukaan.cron.scheduled.leadsync.LeadSyncRunner;
32831 amit.gupta 11
import com.smartdukaan.cron.scheduled.ordertracking.OrderTrackingService;
33274 amit.gupta 12
import com.smartdukaan.cron.scheduled.purchaseorder.POScheduler;
34860 ranu 13
import com.smartdukaan.cron.scheduled.razorpay.FetchPartnersDisbursementTask;
36058 ranu 14
import com.smartdukaan.cron.scheduled.knowlarity.KnowlarityCallMonitorScheduler;
15
import com.spice.profitmandi.common.model.InvoicePdfModel;
34443 vikas.jang 16
import com.spice.profitmandi.common.model.ProfitMandiConstants;
32782 raveendra. 17
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
18
import com.spice.profitmandi.dao.repository.cs.CsService;
19
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
36035 amit 20
import com.spice.profitmandi.dao.service.shopify.ShopifyProductSyncService;
32782 raveendra. 21
import com.spice.profitmandi.dao.util.ContentPojoPopulator;
37499 ranu 22
import com.spice.profitmandi.service.NotificationService;
23
import com.spice.profitmandi.service.integrations.icicilombard.IciciLombardService;
24
import com.spice.profitmandi.service.integrations.icicilombard.model.LastTransactionsResponseModel;
32782 raveendra. 25
import com.spice.profitmandi.service.integrations.samsung.upgradeoffer.UpgradeOfferService;
36063 ranu 26
import com.spice.profitmandi.service.mail.MailOutboxService;
23723 amit.gupta 27
import org.apache.logging.log4j.LogManager;
28
import org.apache.logging.log4j.Logger;
28389 amit.gupta 29
import org.apache.velocity.app.VelocityEngine;
30
import org.apache.velocity.exception.VelocityException;
23898 amit.gupta 31
import org.springframework.beans.factory.annotation.Autowired;
37848 amit 32
import org.springframework.beans.factory.annotation.Value;
33
import com.spice.profitmandi.service.warehouse.SuspendedWarehouseStockAlertService;
23898 amit.gupta 34
import org.springframework.boot.ApplicationArguments;
35
import org.springframework.boot.ApplicationRunner;
23723 amit.gupta 36
import org.springframework.boot.WebApplicationType;
37
import org.springframework.boot.autoconfigure.SpringBootApplication;
38
import org.springframework.boot.builder.SpringApplicationBuilder;
39
import org.springframework.context.annotation.Bean;
40
import org.springframework.context.annotation.ComponentScan;
37631 amit 41
import org.springframework.context.annotation.Lazy;
34554 tejus.loha 42
import org.springframework.context.annotation.EnableAspectJAutoProxy;
23935 amit.gupta 43
import org.springframework.context.annotation.Primary;
23723 amit.gupta 44
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
45
import org.springframework.core.io.ClassPathResource;
35393 amit 46
import org.springframework.core.io.Resource;
23906 amit.gupta 47
import org.springframework.mail.javamail.JavaMailSender;
37453 amit 48
import com.spice.profitmandi.common.services.AuthenticatedIdentityMailSender;
37631 amit 49
import com.spice.profitmandi.common.services.MailRecipientFilter;
50
import com.spice.profitmandi.common.services.RecipientFilteringMailSender;
23906 amit.gupta 51
import org.springframework.mail.javamail.JavaMailSenderImpl;
28389 amit.gupta 52
import org.springframework.ui.velocity.VelocityEngineFactoryBean;
23723 amit.gupta 53
 
32782 raveendra. 54
import java.io.FileInputStream;
55
import java.io.IOException;
56
import java.time.LocalDate;
37058 amit 57
import java.time.LocalDateTime;
32782 raveendra. 58
import java.time.YearMonth;
59
import java.util.ArrayList;
60
import java.util.Arrays;
61
import java.util.List;
62
import java.util.Properties;
63
import java.util.stream.Collectors;
23724 amit.gupta 64
 
23723 amit.gupta 65
@SpringBootApplication
34554 tejus.loha 66
@EnableAspectJAutoProxy
23755 amit.gupta 67
@ComponentScan("com.smartdukaan.cron.*, com.spice.profitmandi.common.*")
24122 govind 68
public class Application implements ApplicationRunner {
69
 
31753 tejbeer 70
    private static final Logger LOGGER = LogManager.getLogger(Application.class);
24122 govind 71
 
31753 tejbeer 72
    @Autowired
73
    LeadSyncRunner leadSyncRunner;
30120 amit.gupta 74
 
31753 tejbeer 75
    @Autowired
76
    StandAlone standAlone;
30209 amit.gupta 77
 
31753 tejbeer 78
    @Autowired
79
    UpgradeOfferService upgradeOfferService;
27392 amit.gupta 80
 
31753 tejbeer 81
    @Autowired
82
    private TicketRelatedScheduledTask ticketRelatedScheduledTask;
28368 tejbeer 83
 
31753 tejbeer 84
    @Autowired
85
    private OnBoardingRelatedSchelduleTask onBoardingRelatedSchelduleTask;
28921 tejbeer 86
 
31753 tejbeer 87
    @Autowired
88
    private InvestmentRelatedTasks investmentRelatedTasks;
27392 amit.gupta 89
 
31753 tejbeer 90
    @Autowired
91
    private CsService csService;
29814 tejbeer 92
 
31753 tejbeer 93
    @Autowired
94
    private FofoOrderItemRepository fofoOrderItemRepository;
24603 amit.gupta 95
 
31753 tejbeer 96
    @Autowired
97
    private ContentPojoPopulator contentPojoPopulator;
29361 tejbeer 98
 
31753 tejbeer 99
    @Autowired
100
    private Listing listing;
24122 govind 101
 
32831 amit.gupta 102
    @Autowired
103
    OrderTrackingService orderTrackingService;
104
 
36306 amit 105
    @Autowired
106
    BatchScheduledTasks batchScheduledTasks;
107
 
36745 ranu 108
    @Autowired
109
    private BeatMissDetectorRunner beatMissDetectorRunner;
110
 
37499 ranu 111
    @Autowired
112
    private IciciLombardService iciciLombardService;
113
 
31753 tejbeer 114
    public static void main(String[] args) throws Throwable {
115
        try {
35803 amit 116
            WebApplicationType webType = WebApplicationType.SERVLET;
117
            for (String arg : args) {
118
                if (arg.contains("spring.main.web-application-type=none")) {
119
                    webType = WebApplicationType.NONE;
120
                    break;
121
                }
122
            }
123
            new SpringApplicationBuilder(Application.class)
124
                    .web(webType)
125
                    .run(args);
31753 tejbeer 126
        } catch (Throwable t) {
127
            t.printStackTrace();
128
        }
129
    }
28389 amit.gupta 130
 
31753 tejbeer 131
    @Bean
132
    public static PropertySourcesPlaceholderConfigurer propertyConfigurer1() {
133
        LOGGER.info("Called Configuration");
134
        PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
35393 amit 135
 
35832 amit 136
        String activeProfile;
137
        Properties properties = new Properties();
138
        try {
139
            properties.load(Application.class.getClassLoader().getResourceAsStream("META-INF/env.property"));
140
        } catch (IOException e) {
141
            LOGGER.error("Error reading env.property, defaulting to dev: " + e);
142
            properties.put("profile", "dev");
143
        }
144
        activeProfile = (String) properties.get("profile");
35393 amit 145
 
35832 amit 146
        Resource appResource;
147
        Resource sharedResource;
148
 
149
        if ("prod".equals(activeProfile)) {
150
            appResource = new ClassPathResource("/META-INF/prod.properties");
151
            sharedResource = new ClassPathResource("/shared-prod.properties");
152
        } else if ("staging".equals(activeProfile)) {
153
            appResource = new ClassPathResource("/META-INF/staging.properties");
154
            sharedResource = new ClassPathResource("/shared-staging.properties");
155
        } else {
156
            appResource = new ClassPathResource("/META-INF/dev.properties");
157
            sharedResource = new ClassPathResource("/shared-dev.properties");
158
        }
159
 
160
        LOGGER.info("Cron loading profile: " + activeProfile);
161
        propertySourcesPlaceholderConfigurer.setLocations(sharedResource, appResource);
35393 amit 162
        propertySourcesPlaceholderConfigurer.setIgnoreResourceNotFound(true);
163
 
31753 tejbeer 164
        return propertySourcesPlaceholderConfigurer;
165
    }
28389 amit.gupta 166
 
31753 tejbeer 167
    @Bean(name = "veloctyEngine")
168
    public VelocityEngine velocityEngine() throws VelocityException, IOException {
169
        VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
28389 amit.gupta 170
 
31753 tejbeer 171
        Properties velocityProperties = new Properties();
172
        velocityProperties.put("resource.loader", "class");
173
        velocityProperties.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
174
        velocityProperties.put("file.resource.loader.cache", true);
175
        velocityProperties.put("file.resource.loader.unicode", true);
176
        velocityProperties.put("input.encoding", "UTF-8");
177
        velocityProperties.put("output.encoding", "UTF-8");
178
        velocityProperties.put("response.encoding", "UTF-8");
179
        velocityProperties.put("overrideLogging", true);
28389 amit.gupta 180
 
31753 tejbeer 181
        // velocityProperties.put("file.resource.loader.path", ".");
28389 amit.gupta 182
 
31753 tejbeer 183
        factory.setVelocityProperties(velocityProperties);
28389 amit.gupta 184
 
31753 tejbeer 185
        return factory.createVelocityEngine();
23723 amit.gupta 186
 
31753 tejbeer 187
    }
24122 govind 188
 
37474 amit 189
    /**
190
     * The default sender. Authenticates as sdtech@smartdukaan.com and rewrites
191
     * every From to that identity — Workspace binds an authenticated session to
192
     * one address and rejects any other with
193
     * "535 Authorization failed: Authenticated user is not authorized to send mail".
194
     *
195
     * Also answers to "mailSender" so the many unqualified JavaMailSender
196
     * injections resolve here rather than needing to be touched.
197
     */
37479 amit 198
    @Bean(name = "googleMailSender")
37631 amit 199
    public JavaMailSender googleMailSender(@Lazy MailRecipientFilter mailRecipientFilter) {
200
        AuthenticatedIdentityMailSender mailSender = new AuthenticatedIdentityMailSender();
201
        mailSender.setRecipientFilter(mailRecipientFilter);
34612 ranu 202
        mailSender.setHost("smtp.gmail.com");
203
        mailSender.setPort(465);
204
        mailSender.setUsername("sdtech@smartdukaan.com");
37369 amit 205
        mailSender.setPassword("wbdwyqrcgosrkwdn"); // App Password
34612 ranu 206
 
207
        Properties props = mailSender.getJavaMailProperties();
208
        props.put("mail.smtp.auth", "true");
209
        props.put("mail.smtp.ssl.enable", "true");
210
        props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
211
        props.put("mail.smtp.socketFactory.port", "465");
212
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
37368 amit 213
        props.put("mail.smtp.connectiontimeout", "30000");
214
        props.put("mail.smtp.timeout", "120000");
215
        props.put("mail.smtp.writetimeout", "120000");
34612 ranu 216
 
217
        return mailSender;
218
    }
219
 
37479 amit 220
    /**
221
     * The default sender.
222
     *
223
     * Verified working 2026-08-31: MAIL FROM:<noreply@smartdukaan.com> returns 250
224
     * over IPv4. It does not authenticate -- Workspace authorises it by allowlisted
225
     * source IP -- so it may legitimately send as noreply@.
226
     *
37480 amit 227
     * googleMailSender is the alternative and its credentials are valid -- verified
228
     * 2026-08-31, AUTH OK on both 465 and 587. Use it by qualifier where a message
229
     * must come from the authenticated identity rather than noreply@.
37479 amit 230
     *
37480 amit 231
     * SMTP on this host works over IPv4 only, and that is not specific to the relay:
232
     * over IPv6 the relay answers "550 5.7.1 Invalid credentials for relay" and
233
     * smtp.gmail.com rejects a valid app password with "535 5.7.8 Username and
234
     * Password not accepted". The JVM prefers IPv4, which is the only reason mail
235
     * leaves this box at all. Anything that prefers IPv6 will fail on both paths.
37479 amit 236
     */
237
    @Bean(name = {"gmailRelaySender", "mailSender"})
238
    @Primary
37631 amit 239
    public JavaMailSender getGmailRelaySender(@Lazy MailRecipientFilter mailRecipientFilter) {
240
        RecipientFilteringMailSender mailSender = new RecipientFilteringMailSender();
241
        mailSender.setRecipientFilter(mailRecipientFilter);
36248 amit 242
        mailSender.setHost("smtp-relay.gmail.com");
243
        mailSender.setPort(587);
244
 
245
        Properties props = mailSender.getJavaMailProperties();
246
        props.put("mail.smtp.starttls.enable", "true");
247
        props.put("mail.smtp.auth", "false");
248
        props.put("mail.smtp.localhost", "smartdukaan.com");
249
        props.put("mail.smtp.ssl.protocols", "TLSv1.2");
250
        props.put("mail.smtp.ssl.trust", "smtp-relay.gmail.com");
251
        props.put("mail.transport.protocol", "smtp");
37368 amit 252
        props.put("mail.smtp.connectiontimeout", "30000");
253
        props.put("mail.smtp.timeout", "120000");
254
        props.put("mail.smtp.writetimeout", "120000");
36248 amit 255
 
256
        return mailSender;
257
    }
258
 
31753 tejbeer 259
    @Autowired
260
    private RunOnceTasks runOnceTasks;
24122 govind 261
 
31753 tejbeer 262
    @Autowired
37613 amit 263
    private InternalGrnTask internalGrnTask;
264
 
265
    @Autowired
37825 amit 266
    private MovementBillingTask movementBillingTask;
267
 
268
    @Autowired
37827 amit 269
    private MovementPoTask movementPoTask;
270
 
271
    @Autowired
37833 amit 272
    private com.smartdukaan.cron.migrations.IrnRetrier irnRetrier;
273
 
274
    @Autowired
31753 tejbeer 275
    private ScheduledTasks scheduledTasks;
30335 amit.gupta 276
 
31753 tejbeer 277
    @Autowired
34306 ranu 278
    private ScheduledTasksTest scheduledTasksTest;
279
 
280
    @Autowired
34860 ranu 281
    private FetchPartnersDisbursementTask fetchPartnersDisbursementTask;
282
 
283
    @Autowired
31753 tejbeer 284
    private Reconciliation reconciliation;
30309 amit.gupta 285
 
31753 tejbeer 286
    @Autowired
36511 amit 287
    private WarehouseStockReconciliation warehouseStockReconciliation;
288
 
289
    @Autowired
37159 amit 290
    private PartnerIdentityIntegrityMonitor partnerIdentityIntegrityMonitor;
291
 
292
    @Autowired
35250 amit 293
    private Migrations migrations;
294
 
295
    @Autowired
31753 tejbeer 296
    CaptchaService captchaService;
28921 tejbeer 297
 
33274 amit.gupta 298
    @Autowired
299
    POScheduler poScheduler;
32878 amit.gupta 300
 
35929 vikas 301
    @Autowired
302
    ShopifyProductSyncService shopifyProductSyncService;
33274 amit.gupta 303
 
37848 amit 304
    @Value("${shopify.warehouseId:13372}")
305
    private int shopifyWarehouseId;
306
 
36058 ranu 307
    @Autowired
37848 amit 308
    private SuspendedWarehouseStockAlertService suspendedWarehouseStockAlertService;
309
 
310
    @Autowired
36058 ranu 311
    KnowlarityCallMonitorScheduler knowlarityCallMonitorScheduler;
35929 vikas 312
 
36063 ranu 313
    @Autowired
314
    MailOutboxService mailOutboxService;
315
 
37499 ranu 316
    @Autowired
317
    NotificationService notificationService;
318
 
31753 tejbeer 319
    @Override
320
    public void run(ApplicationArguments args) throws Exception {
32008 amit.gupta 321
        //scheduledTasks.test();
322
        //System.exit();
31753 tejbeer 323
        LOGGER.info("Called run method");
36058 ranu 324
 
325
        // Knowlarity Call Monitor - Manual trigger (if 10 AM scheduled start was missed)
326
        // This just starts the monitor; scheduled healthCheck and stopMonitoring will still work
327
        if (args.containsOption("startKnowlarityMonitor")) {
328
            LOGGER.info("Starting Knowlarity Call Monitor manually...");
329
            knowlarityCallMonitorScheduler.startMonitoring();
330
            LOGGER.info("Knowlarity Call Monitor started. Scheduled tasks will handle health checks and 10 PM stop.");
331
            // No sleep needed - Spring scheduler keeps app running and handles 10 PM stop
332
        }
36545 ranu 333
        if (args.containsOption("trackingReport")) {
334
            runOnceTasks.dailyTrackingReport();
335
        }
37751 ranu 336
        if (args.containsOption("poStockApprovalDailyDigest")) {
37686 ranu 337
            runOnceTasks.poStockApprovalDailyDigest();
37751 ranu 338
            System.exit(0);
339
        }
37686 ranu 340
        // --rbmRankingForMonth [--month=YYYY-MM]
341
        // Read-only probe: prints the composite RBM ranking for the given month
342
        // (default: previous month) to log. No email, no DB writes.
343
        if (args.containsOption("rbmRankingForMonth")) {
344
            java.time.YearMonth month = java.time.YearMonth.now().minusMonths(1);
345
            if (args.containsOption("month")) {
346
                try {
347
                    month = java.time.YearMonth.parse(args.getOptionValues("month").get(0));
348
                } catch (Exception e) {
349
                    LOGGER.error("Invalid --month value; expected YYYY-MM: {}", e.getMessage());
350
                    System.exit(1);
351
                }
352
            }
353
            runOnceTasks.printRbmRankingForMonth(month);
354
            System.exit(0);
355
        }
36058 ranu 356
        if (args.containsOption("stopKnowlarityMonitor")) {
357
            LOGGER.info("Stopping Knowlarity Call Monitor...");
358
            knowlarityCallMonitorScheduler.stopMonitoring();
359
        }
36115 ranu 360
        // Knowlarity - Request fresh snapshot manually (when status not updating)
361
        if (args.containsOption("refreshKnowlaritySnapshot")) {
362
            LOGGER.info("Requesting Knowlarity snapshot manually...");
363
            knowlarityCallMonitorScheduler.healthCheck();
364
            LOGGER.info("Knowlarity snapshot requested.");
365
            System.exit(0);
366
        }
36058 ranu 367
 
33260 amit.gupta 368
        if (args.containsOption("removePartialBillingForTransaction")) {
369
            if (args.containsOption("trId")) {
33051 amit.gupta 370
                int transactionId = Integer.parseInt(args.getOptionValues("trId").get(0));
33054 amit.gupta 371
                scheduledTasks.removePartialBillingForTransaction(transactionId);
33051 amit.gupta 372
            }
373
            System.exit(0);
374
        }
34523 ranu 375
        if (args.containsOption("createOpeningStockPartyWise")) {
376
            scheduledTasks.createOpeningStockPartyWise();
377
            System.exit(0);
378
        }
29814 tejbeer 379
 
31753 tejbeer 380
        if (args.containsOption("rw")) {
381
            System.out.println("Reverse wallet");
382
            scheduledTasks.reverseWallet();
383
            System.exit(0);
384
        }
385
        if (args.containsOption("sendIndentTertiary")) {
386
            System.out.println("sendIndentTertiary");
387
            scheduledTasks.sendIndentTertiary();
388
            System.exit(0);
389
        }
390
        if (args.containsOption("checkPartnerActiveStore")) {
391
            System.out.println("checkPartnerActiveStore");
392
            scheduledTasks.checkPartnerActiveStore();
393
            System.exit(0);
394
        }
37172 amit 395
        if (args.containsOption("updatePjpAgendaInstances")) {
396
            System.out.println("updatePjpAgendaInstances");
397
            scheduledTasks.updatePjpAgendaInstances();
398
            System.exit(0);
399
        }
37040 ranu 400
        if (args.containsOption("updatePartnerActivationTypeByMonthlySale")) {
401
            System.out.println("updatePartnerActivationTypeByMonthlySale");
402
            scheduledTasks.updatePartnerActivationTypeByMonthlySale();
403
            System.exit(0);
404
        }
29800 manish 405
 
31753 tejbeer 406
        if (args.containsOption("selectFinServiceFollowUpDateByCurrDate")) {
407
            System.out.println("selectfinServiceFollowUpDateByCurrDate");
28368 tejbeer 408
 
31753 tejbeer 409
            scheduledTasks.selectFinServiceFollowUpDateByCurrDate(LocalDate.now());
410
            System.exit(0);
411
        }
25073 amit.gupta 412
 
31753 tejbeer 413
        if (args.containsOption("addHdfcPayment")) {
414
            runOnceTasks.addPayment();
415
            System.exit(0);
416
        }
35250 amit 417
        if (args.containsOption("migrateOriginalInventoryItemId")) {
418
            int batchSize = 10_000;
419
            if (args.containsOption("batchSize")) {
420
                try {
421
                    batchSize = Integer.parseInt(args.getOptionValues("batchSize").get(0));
422
                } catch (Exception e) {
423
                    LOGGER.warn("Invalid batchSize provided, defaulting to {}", batchSize);
424
                }
425
            }
426
            LOGGER.info("Starting migration for warehouse.inventoryItem.originalInventoryItemId with batchSize={}", batchSize);
37602 amit 427
            migrations.migrateWarehouseOriginalInventoryItemId(batchSize);
35250 amit 428
            LOGGER.info("Migration completed.");
429
            System.exit(0);
430
        }
37825 amit 431
        if (args.containsOption("autoBillMovement")) {
432
            if (!args.containsOption("pos") || !args.containsOption("email") || !args.containsOption("provider")) {
433
                LOGGER.error("autoBillMovement needs --pos=PO1,PO2, --email=<operator> and --provider=<logistics"
434
                        + " provider id>; add --live to bill (default is a dry run)");
435
                System.exit(1);
436
            }
437
            List<String> poNumbers = new ArrayList<>();
438
            for (String value : args.getOptionValues("pos")) {
439
                for (String poNumber : value.split(",")) {
440
                    if (!poNumber.trim().isEmpty()) {
441
                        poNumbers.add(poNumber.trim());
442
                    }
443
                }
444
            }
445
            movementBillingTask.billMovements(poNumbers, args.getOptionValues("email").get(0),
446
                    Integer.parseInt(args.getOptionValues("provider").get(0)), args.containsOption("live"));
447
            System.exit(0);
448
        }
37833 amit 449
        if (args.containsOption("retryIrn")) {
450
            if (!args.containsOption("invoices")) {
451
                LOGGER.error("retryIrn needs --invoices=INV1,INV2 (invoices NIC rejected, irn_generated=0)");
452
                System.exit(1);
453
            }
454
            List<String> invoiceNumbers = new ArrayList<>();
455
            for (String value : args.getOptionValues("invoices")) {
456
                for (String invoiceNumber : value.split(",")) {
457
                    if (!invoiceNumber.trim().isEmpty()) {
458
                        invoiceNumbers.add(invoiceNumber.trim());
459
                    }
460
                }
461
            }
462
            irnRetrier.retryAll(invoiceNumbers);
463
            System.exit(0);
464
        }
37832 amit 465
        if (args.containsOption("closeMovementPO")) {
466
            if (!args.containsOption("pos") || !args.containsOption("email")) {
467
                LOGGER.error("closeMovementPO needs --pos=PO1,PO2 and --email=<closed by>; add --live to close"
468
                        + " (default is a dry run)");
469
                System.exit(1);
470
            }
471
            List<String> poNumbers = new ArrayList<>();
472
            for (String value : args.getOptionValues("pos")) {
473
                for (String poNumber : value.split(",")) {
474
                    if (!poNumber.trim().isEmpty()) {
475
                        poNumbers.add(poNumber.trim());
476
                    }
477
                }
478
            }
479
            movementPoTask.closeMovementPos(poNumbers, args.getOptionValues("email").get(0), args.containsOption("live"));
480
            System.exit(0);
481
        }
37827 amit 482
        if (args.containsOption("autoCreateMovementPO")) {
483
            if (!args.containsOption("file") || !args.containsOption("warehouse") || !args.containsOption("supplier")
484
                    || !args.containsOption("email")) {
485
                LOGGER.error("autoCreateMovementPO needs --file=<xlsx>, --warehouse=<destination>, --supplier=<internal"
486
                        + " supplier> and --email=<operator>; add --live to raise (default is a dry run), --bill"
487
                        + " --provider=<logistics provider id> to dry-run billing of the raised POs");
488
                System.exit(1);
489
            }
490
            boolean bill = args.containsOption("bill");
491
            if (bill && !args.containsOption("provider")) {
492
                LOGGER.error("autoCreateMovementPO --bill needs --provider=<logistics provider id>");
493
                System.exit(1);
494
            }
495
            try {
496
                movementPoTask.createMovementPo(args.getOptionValues("file").get(0),
497
                        Integer.parseInt(args.getOptionValues("warehouse").get(0)),
498
                        Integer.parseInt(args.getOptionValues("supplier").get(0)), args.getOptionValues("email").get(0),
499
                        args.containsOption("live"), bill,
500
                        bill ? Integer.parseInt(args.getOptionValues("provider").get(0)) : 0);
501
            } catch (Exception e) {
37828 amit 502
                LOGGER.error("autoCreateMovementPO FAILED (a 'LIVE RUN complete : raised' line above means the PO did"
503
                        + " commit): {}", e.getMessage(), e);
37827 amit 504
                System.exit(1);
505
            }
506
            System.exit(0);
507
        }
37613 amit 508
        if (args.containsOption("autoGrnInternal")) {
509
            if (!args.containsOption("invoices") || !args.containsOption("email")) {
510
                LOGGER.error("autoGrnInternal needs --invoices=A,B and --email=<operator>");
511
                System.exit(1);
512
            }
513
            List<String> invoiceNumbers = new ArrayList<>();
514
            for (String value : args.getOptionValues("invoices")) {
515
                for (String invoiceNumber : value.split(",")) {
516
                    if (!invoiceNumber.trim().isEmpty()) {
517
                        invoiceNumbers.add(invoiceNumber.trim());
518
                    }
519
                }
520
            }
521
            String operatorEmail = args.getOptionValues("email").get(0);
522
            boolean dryRun = args.containsOption("dryRun");
523
            internalGrnTask.grnInternalInvoices(invoiceNumbers, operatorEmail, dryRun);
524
            System.exit(0);
525
        }
37617 amit 526
        if (args.containsOption("reverseGrnInternal")) {
527
            if (!args.containsOption("invoices")) {
528
                LOGGER.error("reverseGrnInternal needs --invoices=A,B");
529
                System.exit(1);
530
            }
531
            List<String> invoiceNumbers = new ArrayList<>();
532
            for (String value : args.getOptionValues("invoices")) {
533
                for (String invoiceNumber : value.split(",")) {
534
                    if (!invoiceNumber.trim().isEmpty()) {
535
                        invoiceNumbers.add(invoiceNumber.trim());
536
                    }
537
                }
538
            }
539
            internalGrnTask.reverseInternalInvoices(invoiceNumbers, args.containsOption("dryRun"));
540
            System.exit(0);
541
        }
31753 tejbeer 542
        if (args.containsOption("processSchemeOut")) {
543
            System.out.println("Process schemeOut");
544
            int orderId = Integer.parseInt(args.getOptionValues("orderid").get(0));
545
            int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
546
            runOnceTasks.processSchemeOut(fofoId, orderId);
547
            System.exit(0);
548
        }
549
        if (args.containsOption("at")) {
550
            ticketRelatedScheduledTask.alertforTicket();
551
            System.exit(0);
552
        }
553
        if (args.containsOption("et")) {
554
            ticketRelatedScheduledTask.escalateTicket();
555
            ;
556
            System.exit(0);
557
        }
37499 ranu 558
        if (args.containsOption("iciciBalance")) {
559
            System.out.println("Fetching ICICI CD balance manually");
560
            try {
561
                LastTransactionsResponseModel response = iciciLombardService.getLastTwentyFiveTransactions(null);
562
                System.out.println("Response: " + response);
563
                if (response != null
564
                        && response.getTransactionsDetails() != null
565
                        && !response.getTransactionsDetails().isEmpty()) {
566
                    LastTransactionsResponseModel.TransactionDetail latest = response.getTransactionsDetails().get(0);
567
                    System.out.println("Current available balance = " + latest.getAvailableBalance()
568
                            + " (as of " + latest.getEffectiveDate() + " — status: " + latest.getStatus() + ")");
569
                    System.out.println("Last 25 transactions:");
570
                    response.getTransactionsDetails().forEach(t -> System.out.println("  " + t));
571
                }
572
            } catch (Exception e) {
573
                e.printStackTrace();
574
            }
575
            System.exit(0);
576
        }
31753 tejbeer 577
        if (args.containsOption("sr")) {
578
            List<String> schemeIds = args.getOptionValues("schemeId");
579
            System.out.println(schemeIds);
580
            scheduledTasks.schemeRollback(schemeIds);
581
            System.exit(0);
582
        }
583
        if (args.containsOption("processActivation")) {
584
            scheduledTasks.processActivation();
585
            System.exit(0);
586
        }
25721 tejbeer 587
 
31753 tejbeer 588
        if (args.containsOption("checkRazorPayPaymentStatus")) {
589
            scheduledTasks.checkRazorPayPaymentStatus();
590
            System.exit(0);
591
        }
592
        if (args.containsOption("grouping")) {
593
            scheduledTasks.grouping();
594
            System.exit(0);
595
        }
596
        if (args.containsOption("fixWallet")) {
597
            runOnceTasks.fixWallet();
598
            System.exit(0);
599
        }
36511 amit 600
        if (args.containsOption("reconcileInventorySnapshot")) {
601
            warehouseStockReconciliation.reconcile();
602
            System.exit(0);
603
        }
37159 amit 604
        if (args.containsOption("partnerIdentityIntegrityMonitor")) {
605
            partnerIdentityIntegrityMonitor.monitor();
606
            System.exit(0);
607
        }
31753 tejbeer 608
        if (args.containsOption("reconcileExpiredFixedSchemes")) {
609
            reconciliation.reconcileExpiredFixedSchemes();
610
            System.exit(0);
611
        }
612
        if (args.containsOption("dailyReconciliation")) {
613
            if (args.containsOption("date")) {
614
                LocalDate date = LocalDate.parse(args.getOptionValues("date").get(0));
615
                reconciliation.dailyReconciliation(date);
616
            } else {
617
                reconciliation.dailyReconciliation(LocalDate.now().minusDays(1));
618
            }
619
            System.exit(0);
620
        }
621
        /*
622
         * if (args.containsOption("test")) { schemeService.processSchemeIn(9243,
623
         * 175138102); throw new Exception(); }
624
         */
28921 tejbeer 625
 
31753 tejbeer 626
        if (args.containsOption("sendNotification")) {
627
            scheduledTasks.sendNotification();
628
            System.exit(0);
629
        }
26291 tejbeer 630
 
36063 ranu 631
        if (args.containsOption("processPendingMails")) {
632
            System.out.println("Processing pending mails...");
633
            mailOutboxService.processPendingMails();
634
            System.exit(0);
635
        }
636
 
37499 ranu 637
        // Dispatch any notification_schedule rows whose scheduled_timestamp <= now.
638
        // Same code path as the hourly cron in NotificationDispatchScheduler, but callable
639
        // on demand from dev / staging where the isProd gate normally blocks the cron.
640
        // Usage: --dispatchScheduledNotifications [--batch=200]
37510 ranu 641
        if (args.containsOption("dispatchScheduledNotifications")) {
37499 ranu 642
            int batch = 200;
643
            if (args.containsOption("batch")) {
644
                try { batch = Integer.parseInt(args.getOptionValues("batch").get(0)); }
645
                catch (Exception ignored) { }
646
            }
647
            System.out.println("Dispatching due scheduled notifications (batch=" + batch + ")...");
648
            int attempted = notificationService.dispatchDueScheduled(batch);
649
            System.out.println("Attempted: " + attempted + " row(s)");
650
            System.exit(0);
37510 ranu 651
        }
37499 ranu 652
 
31753 tejbeer 653
        if (args.containsOption("ticketClosed")) {
35568 amit 654
            // Redirected to TicketRelatedScheduledTask which handles auto-close as part of escalateTicket
655
            ticketRelatedScheduledTask.escalateTicket();
31753 tejbeer 656
            System.exit(0);
657
        }
28207 tejbeer 658
 
31753 tejbeer 659
        if (args.containsOption("getVendorWarehouses")) {
660
            int warehouseId = Integer.parseInt(args.getOptionValues("warehouseId").get(0));
661
            scheduledTasks.getVendorWarehouses(warehouseId);
662
            System.exit(0);
663
        }
29776 tejbeer 664
 
31753 tejbeer 665
        if (args.containsOption("checkfocusedModelInPartnerStock")) {
34344 amit.gupta 666
            try {
667
                scheduledTasks.checkfocusedModelInPartnerStock();
668
            } finally {
669
                System.exit(0);
670
            }
31753 tejbeer 671
        }
29451 manish 672
 
31753 tejbeer 673
        if (args.containsOption("checkImeiActivation")) {
674
            scheduledTasks.checkImeiActivation();
675
            System.exit(0);
676
        }
29776 tejbeer 677
 
31753 tejbeer 678
        if (args.containsOption("partnerProblemAlert")) {
679
            scheduledTasks.partnerProblemAlert();
680
            System.exit(0);
681
        }
682
        if (args.containsOption("notify")) {
683
            if (args.containsOption("fofoId")) {
684
                int fofoId = Integer.parseInt(args.getOptionValues("fofoId").get(0));
685
                scheduledTasks.sendDailySalesNotificationToPartner(fofoId);
686
            }
687
            System.exit(0);
688
        }
689
        if (args.containsOption("findMismatchesInIndent")) {
690
            runOnceTasks.findMismatchesInIndent();
691
            System.exit(0);
692
        }
29035 tejbeer 693
 
31753 tejbeer 694
        if (args.containsOption("onboardingEventDelays")) {
695
            onBoardingRelatedSchelduleTask.onboardingEventDelays();
696
            System.exit(0);
697
        }
28982 tejbeer 698
 
31753 tejbeer 699
        if (args.containsOption("onBoardingCompleteEventEmail")) {
700
            onBoardingRelatedSchelduleTask.onBoardingCompleteEventEmail();
701
            System.exit(0);
702
        }
28921 tejbeer 703
 
31753 tejbeer 704
        if (args.containsOption("onBoardingDocumentsPending")) {
705
            onBoardingRelatedSchelduleTask.onBoardingDocumentsPending();
706
            System.exit(0);
707
        }
708
        if (args.containsOption("onBoardingMigration")) {
709
            onBoardingRelatedSchelduleTask.onBoardingMigration();
710
            System.exit(0);
711
        }
28921 tejbeer 712
 
33859 tejus.loha 713
//        if (args.containsOption("advancePaymentPendingAlert")) {
714
//            onBoardingRelatedSchelduleTask.advancePaymentPendingAlert();
715
//            System.exit(0);
716
//        }
28963 tejbeer 717
 
31753 tejbeer 718
        if (args.containsOption("fullPaymentPendingAlert")) {
719
            onBoardingRelatedSchelduleTask.fullPaymentPendingAlert();
720
            System.exit(0);
721
        }
29308 tejbeer 722
 
33859 tejus.loha 723
//        if (args.containsOption("advancePaymentPendinglegalAlert")) {
724
//            onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
725
//            System.exit(0);
726
//        }
31117 tejbeer 727
 
31753 tejbeer 728
        if (args.containsOption("markDelhiveryOrderDelivered")) {
32831 amit.gupta 729
            orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 730
            System.exit(0);
731
        }
32831 amit.gupta 732
 
31753 tejbeer 733
        if (args.containsOption("markBlueDartOrderDelivered")) {
32794 raveendra. 734
            System.out.println("Marking BlueDart Order Delivered...");
32831 amit.gupta 735
            orderTrackingService.markBlueDartOrderDelivered();
31753 tejbeer 736
            System.exit(0);
737
        }
738
        if (args.containsOption("mergingdata")) {
739
            onBoardingRelatedSchelduleTask.mergingdata();
740
            System.exit(0);
741
        }
742
        if (args.containsOption("brandingAlert")) {
743
            onBoardingRelatedSchelduleTask.brandingAlert();
744
            System.exit(0);
745
        }
31089 amit.gupta 746
 
33859 tejus.loha 747
//        if (args.containsOption("storeTimelinePromoterPending")) {
748
//            onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
749
//            System.exit(0);
750
//        }
31249 tejbeer 751
 
31753 tejbeer 752
        if (args.containsOption("ppl")) {
753
            runOnceTasks.printPendingLeads();
754
            System.exit(0);
755
        }
31249 tejbeer 756
 
31753 tejbeer 757
        if (args.containsOption("notifyAll")) {
758
            scheduledTasks.sendDailySalesNotificationToPartner(null);
759
            System.exit(0);
760
        }
31249 tejbeer 761
 
31753 tejbeer 762
        if (args.containsOption("monthlyTargetForInternalTeam")) {
763
            scheduledTasks.monthlyTargetForInternalTeam();
764
            System.exit(0);
765
        }
31249 tejbeer 766
 
31753 tejbeer 767
        if (args.containsOption("monthlyTargetForPartner")) {
768
            scheduledTasks.monthlyTargetForPartner();
769
            System.exit(0);
770
        }
33444 ranu 771
        if (args.containsOption("findAllLiveDemoBrandItemsByBillingDate")) {
772
            scheduledTasks.findAllLiveDemoBrandItemsByBillingDate();
773
            System.exit(0);
774
        }
33464 ranu 775
        if (args.containsOption("findTodayPocoBillingItems")) {
776
            scheduledTasks.findTodayPocoBillingItems();
777
            System.exit(0);
778
        }
28921 tejbeer 779
 
31753 tejbeer 780
        if (args.containsOption("hygineAlertForPartner")) {
781
            scheduledTasks.hygineAlertForPartner();
782
            System.exit(0);
783
        }
28921 tejbeer 784
 
31753 tejbeer 785
        if (args.containsOption("hygineAlertForInternalTeam")) {
786
            scheduledTasks.hygineAlertForInternalTeam();
787
            System.exit(0);
788
        }
789
 
32214 jai.hind 790
        if (args.containsOption("checkItelImeiActivationNew")) {
791
            scheduledTasks.checkItelImeiActivationNew(LocalDate.now(), 15);
792
            System.exit(0);
793
        }
37479 amit 794
        // One tick's worth (50 imeis), not a full pass -- the backlog is cleared by the
795
        // scheduled 5-minute ticks. Useful for checking the endpoint by hand.
796
        if (args.containsOption("checkCarlcareImeiActivation")) {
797
            scheduledTasks.checkCarlcareImeiActivation();
798
            System.exit(0);
799
        }
31753 tejbeer 800
        if (args.containsOption("once")) {
33274 amit.gupta 801
 
802
            if (args.containsOption("autoClosePurchaseOrders")) {
803
                poScheduler.autoClosePurchaseOrders();
804
            }
31753 tejbeer 805
            if (args.containsOption("cancelOnceAssist")) {
806
                if (args.containsOption("invoiceNumber")) {
807
                    String oneAssistInvoiceNumber = args.getOptionValues("invoiceNumber").get(0);
808
                    runOnceTasks.cancelOnceAssist(oneAssistInvoiceNumber);
809
                }
810
 
35266 ranu 811
 
31753 tejbeer 812
            }
34208 ranu 813
            if (args.containsOption("cancelOnceAssist")) {
814
                if (args.containsOption("MemberShipNumber")) {
815
                    String applicationNo = args.getOptionValues("applicationNo").get(0);
816
                    String membershipId = args.getOptionValues("membershipId").get(0);
817
                    runOnceTasks.cancelOnceAssistByMemberShipNumber(applicationNo, membershipId);
818
                }
819
 
820
            }
33260 amit.gupta 821
            if (args.containsOption("changeFulfillmentWarehouse")) {
822
                if (args.containsOption("orderId") && args.containsOption("whId")) {
35277 amit 823
                    List<Integer> orderIds = Arrays.stream(args.getOptionValues("orderId").get(0).split(","))
824
                            .map(String::trim)
825
                            .map(Integer::parseInt)
826
                            .collect(Collectors.toList());
827
 
35276 amit 828
                    int warehouseId = Integer.parseInt(args.getOptionValues("whId").get(0));
829
                    for (Integer orderId : orderIds) {
830
                        runOnceTasks.changeFulfillmentWarehouse(orderId, warehouseId);
831
                    }
33260 amit.gupta 832
                }
833
                System.exit(0);
834
            }
31753 tejbeer 835
            if (args.containsOption("1")) {
836
                if (args.containsOption("test")) {
31618 amit.gupta 837
                    //scheduledTasks.sendPartnerInvestmentDetails(args.getOptionValues("email"));
31753 tejbeer 838
                    System.out.println("Calling test method");
36003 aman 839
                    try {
840
                        scheduledTasks.test();
841
                    } catch (Throwable e) {
842
                        throw new RuntimeException(e);
843
                    }
35165 amit 844
                    System.exit(0);
32083 tejbeer 845
 
846
                    if (args.containsOption("approveVendorCatalogPricing")) {
847
                        scheduledTasks.approveVendorCatalogPricing();
848
                        System.exit(0);
849
                    }
32080 tejbeer 850
                } else if (args.containsOption("test1")) {
32008 amit.gupta 851
                    scheduledTasks.test1();
34845 ranu 852
                } else if (args.containsOption("scheduleTaskTest1")) {
853
 
854
                    scheduledTasksTest.test();
855
                }else if (args.containsOption("generateBiReport")) {
856
                    scheduledTasksTest.generateBiReport();
34945 ranu 857
                }else if (args.containsOption("abmSendertest")) {
34946 ranu 858
                    runOnceTasks.setAbmReportSender();
37848 amit 859
                }else if (args.containsOption("sendSuspendedWarehouseStockAlert")) {
860
                    LOGGER.info(suspendedWarehouseStockAlertService.sendAlert());
35788 vikas 861
                }else if (args.containsOption("syncProductsToShopify")) {
37848 amit 862
                    shopifyProductSyncService.syncByWarehouse(shopifyWarehouseId);
34321 ranu 863
                }
34860 ranu 864
                else if (args.containsOption("fetchPartnerDisburseMentTask")) {
865
                    if(args.containsOption("fetchDisbursements")){
866
                        fetchPartnersDisbursementTask.fetchDisbursementsTest();
867
                    }
868
                    else if(args.containsOption("creditAmountTest")){
869
                        fetchPartnersDisbursementTask.creditAmountTest();
870
                    }
871
                    else if(args.containsOption("createContactsAndFundsForFranchiseeTest")){
872
                        fetchPartnersDisbursementTask.createContactsAndFundsForFranchiseeTest();
873
                    }
874
                    else if(args.containsOption("rabbitTransactionProducertest")){
875
                        fetchPartnersDisbursementTask.rabbitTransactionProducertest();
876
                    }
34879 ranu 877
                    else if(args.containsOption("sendingDisbursementMail")){
878
                        fetchPartnersDisbursementTask.sendingDisbursementMail();
879
                    }
34860 ranu 880
                    else {
881
                        fetchPartnersDisbursementTask.test();
882
                    }
883
                }
34845 ranu 884
                else if (args.containsOption("testNew1")) {
34307 ranu 885
                    List<String> loanIdArgs = args.getOptionValues("loanIds");  // ["34833,36536,37151"]
886
                    List<Integer> loanIds = new ArrayList<>();
887
 
888
                    if (loanIdArgs != null && !loanIdArgs.isEmpty()) {
889
                        String csv = loanIdArgs.get(0);
890
                        loanIds = Arrays.stream(csv.split(","))
891
                                .map(String::trim)
892
                                .map(Integer::parseInt)
893
                                .collect(Collectors.toList());
894
                    }
34321 ranu 895
                    scheduledTasksTest.findLoanTransactionMapingAccordingLoan(loanIds);
34309 ranu 896
                } else if (args.containsOption("testNew2")) {
34308 ranu 897
                    if (args.containsOption("createLoan")) {
898
                        // Extract each parameter
899
                        int transactionId = 0;
900
                        double invoiceAmount = 0.0;
901
                        String invoiceNumber = "";
902
 
903
                        if (args.containsOption("transactionId")) {
904
                            transactionId = Integer.parseInt(args.getOptionValues("transactionId").get(0));
905
                        }
906
 
907
                        if (args.containsOption("invoiceAmount")) {
908
                            invoiceAmount = Double.parseDouble(args.getOptionValues("invoiceAmount").get(0));
909
                        }
910
 
911
                        if (args.containsOption("invoiceNumber")) {
912
                            invoiceNumber = args.getOptionValues("invoiceNumber").get(0);
913
                        }
914
 
915
                        // Call your method
916
                        scheduledTasksTest.createLoanForBillingByTransactionIdAndInvoiceNumber(transactionId, invoiceAmount, invoiceNumber);
917
                    }
918
 
32482 amit.gupta 919
                } else {
31753 tejbeer 920
                    System.out.println("Called sendPartnerInvestmentDetails");
921
                    scheduledTasks.sendPartnerInvestmentDetails();
922
                }
923
                System.exit(0);
924
            }
925
            if (args.containsOption("2")) {
926
                if (args.containsOption("test")) {
927
                    String[] emails = new String[args.getOptionValues("email").size()];
928
                    scheduledTasks.sendAgeingReport(args.getOptionValues("email").toArray(emails));
929
                } else {
930
                    scheduledTasks.sendAgeingReport();
931
                }
932
                System.exit(0);
933
            }
33457 amit.gupta 934
 
31753 tejbeer 935
            if (args.containsOption("cancelOrder")) {
936
                List<String> invoiceNumbers = args.getOptionValues("invoiceNumber");
937
                runOnceTasks.cancelOrder(invoiceNumbers);
938
            }
36554 amit 939
            if (args.containsOption("postCreditNoteForDuplicateInvoice")) {
940
                String duplicateInvoice = args.getOptionValues("duplicateInvoice").get(0);
941
                String activeInvoice = args.getOptionValues("activeInvoice").get(0);
942
                runOnceTasks.postCreditNoteForDuplicateInvoice(duplicateInvoice, activeInvoice);
943
            }
31753 tejbeer 944
            if (args.containsOption("migratePurchase")) {
945
                runOnceTasks.migratePurchase();
946
            }
947
            if (args.containsOption("migratepd")) {
948
                scheduledTasks.moveImeisToPriceDropImeis();
949
            }
950
            if (args.containsOption("walletmismatch")) {
951
                scheduledTasks.walletmismatch();
952
            }
953
            if (args.containsOption("schemewalletmismatch")) {
954
                scheduledTasks.schemewalletmismatch();
955
            }
956
            if (args.containsOption("gst")) {
957
                scheduledTasks.gst();
958
            }
959
            if (args.containsOption("mailDashboardScreenshots")) {
960
                runOnceTasks.mailDashboardScreenshots();
961
            }
962
            if (args.containsOption("notifyLead")) {
963
                scheduledTasks.notifyLead();
964
                scheduledTasks.notifyVisits();
965
            }
966
            if (args.containsOption("fixgrn")) {
967
                runOnceTasks.fixGrn();
968
            }
969
            if (args.containsOption("pbfix")) {
970
                runOnceTasks.pbfix();
971
            }
972
            if (args.containsOption("mongom")) {
973
                runOnceTasks.mongom();
974
            }
975
            if (args.containsOption("processPd")) {
976
                int priceDropId = Integer.parseInt(args.getOptionValues("processPd").get(0));
977
                runOnceTasks.processPd(priceDropId);
978
            }
979
            if (args.containsOption("fixdupimeigrn")) {
980
                runOnceTasks.fixDupGrns();
981
            }
982
            if (args.containsOption("cancel")) {
36053 amit 983
                boolean recreatePri = args.containsOption("recreatePri");
984
                runOnceTasks.cancelDn(args.getOptionValues("dn").get(0), recreatePri);
31753 tejbeer 985
            }
986
            if (args.containsOption("fixScheme")) {
987
                runOnceTasks.fixScheme();
988
            }
989
            if (args.containsOption("syncLeads")) {
990
                leadSyncRunner.syncLeads();
991
            }
992
            if (args.containsOption("testCs")) {
993
                int category = Integer.parseInt(args.getOptionValues("category").get(0));
994
                EscalationType escalationType = EscalationType.valueOf(args.getOptionValues("escalation").get(0));
995
                int fofoId = Integer.parseInt(args.getOptionValues("fofoid").get(0));
996
                csService.getAuthUserId(category, escalationType, fofoId);
997
            }
998
            if (args.containsOption("duporder")) {
999
                runOnceTasks.removeDuplicateOrders();
1000
            }
1001
            if (args.containsOption("createDummyInvoices")) {
1002
                runOnceTasks.createDummyInvoices();
1003
            }
28921 tejbeer 1004
 
31753 tejbeer 1005
            if (args.containsOption("payMonthlyInvestment")) {
1006
                investmentRelatedTasks.payMonthlyInvestment();
1007
            }
1008
            if (args.containsOption("evaluateActualInvestmentPayout")) {
1009
                investmentRelatedTasks.evaluateActualInvestmentPayout();
1010
            }
1011
            if (args.containsOption("createOffers")) {
1012
                if (args.containsOption("fileName")) {
1013
                    String fileName = args.getOptionValues("fileName").get(0);
1014
                    FileInputStream stream = new FileInputStream(fileName);
1015
                    runOnceTasks.createOffers(stream);
1016
                }
1017
            }
1018
            if (args.containsOption("schemeout")) {
1019
                if (args.containsOption("invoices")) {
1020
                    String invoicesString = args.getOptionValues("invoices").get(0);
1021
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
1022
                    scheduledTasks.processSchemeOut(invoices);
1023
                }
1024
            }
1025
            if (args.containsOption("schemein")) {
1026
                if (args.containsOption("invoices")) {
1027
                    String invoicesString = args.getOptionValues("invoices").get(0);
1028
                    List<String> invoices = Arrays.asList(invoicesString.split(","));
1029
                    scheduledTasks.processSchemeIn(invoices);
1030
                }
1031
            }
28921 tejbeer 1032
 
31753 tejbeer 1033
            if (args.containsOption("fixScans")) {
1034
                runOnceTasks.fixScans();
1035
            }
1036
            if (args.containsOption("fixPrebookingOrderGrn")) {
1037
                runOnceTasks.genericCreateCurrentInventorySnapshot();
1038
            }
1039
            if (args.containsOption("fixOurSerialized")) {
1040
                if (args.containsOption("orderIds")) {
1041
                    String orderIdsString = args.getOptionValues("orderIds").get(0);
1042
                    List<Integer> orderIds = Arrays.asList(orderIdsString.split(",")).stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
1043
                    // runOnceTasks.fixOurSerialized(orderIds);
1044
                }
1045
            }
29776 tejbeer 1046
 
31753 tejbeer 1047
            if (args.containsOption("reverseMaa")) {
1048
                runOnceTasks.reverseMaa();
1049
            }
29776 tejbeer 1050
 
31753 tejbeer 1051
            if (args.containsOption("fixOffer")) {
1052
                runOnceTasks.fixOffer();
1053
            }
29794 tejbeer 1054
 
31753 tejbeer 1055
            if (args.containsOption("opporeno")) {
1056
                runOnceTasks.opporeno();
1057
            }
30309 amit.gupta 1058
 
31753 tejbeer 1059
            if (args.containsOption("fixorders")) {
1060
                runOnceTasks.fixOrders();
1061
            }
1062
            if (args.containsOption("fixreservations")) {
1063
                runOnceTasks.fixReservations();
1064
            }
1065
            if (args.containsOption("addinvestment")) {
1066
                runOnceTasks.addInvestment();
1067
            }
1068
            if (args.containsOption("brandregion")) {
1069
                runOnceTasks.brandRegion();
1070
            }
1071
            if (args.containsOption("rollOutUpgardedMargins")) {
35520 amit 1072
                scheduledTasks.rollOutUpgardedMargins(Arrays.asList(175140172, 175140189));
31753 tejbeer 1073
            }
34029 ranu 1074
            if (args.containsOption("pushRbmTargets")) {
1075
                scheduledTasks.persistRbmTodayTargets();
1076
            }
37499 ranu 1077
            if (args.containsOption("pushSalesTargets")) {
1078
                // Run this AFTER pushRbmTargets so today's RBM snapshots exist to roll up.
1079
                scheduledTasks.persistSalesTodayTargets();
1080
            }
1081
            if (args.containsOption("pushSalesTargetsForDate")) {
1082
                // Backfill / seed for a specific date, e.g. --pushSalesTargetsForDate=2026-08-25
1083
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesTargetsForDate").get(0));
1084
                scheduledTasks.persistSalesTargetsForDate(d);
1085
            }
1086
            if (args.containsOption("pushSalesAchievements")) {
1087
                // Daily Sales achievement snapshot (audit/history). Independent
1088
                // of pushSalesTargets — can run any time after orders settle.
1089
                scheduledTasks.persistSalesTodayAchievements();
1090
            }
1091
            if (args.containsOption("pushSalesAchievementsForDate")) {
1092
                // Backfill / seed for a specific date, e.g. --pushSalesAchievementsForDate=2026-08-25
1093
                LocalDate d = LocalDate.parse(args.getOptionValues("pushSalesAchievementsForDate").get(0));
1094
                scheduledTasks.persistSalesAchievementsForDate(d);
1095
            }
31753 tejbeer 1096
            if (args.containsOption("rollOutUpgardedMarginsNextMonth")) {
35524 amit 1097
                System.out.println("In rollOutUpgardedMarginsNextMonth");
35532 amit 1098
                scheduledTasks.rollOutUpgardedMarginsNextMonth(Arrays.asList(175140172, 175140189, 175138897));
31753 tejbeer 1099
            }
1100
            if (args.containsOption("checkCancellationMargin")) {
1101
                scheduledTasks.checkCancellationMargin();
1102
            }
1103
            if (args.containsOption("reviewUncontactablePartner")) {
1104
                scheduledTasks.reviewUncontactablePartner();
1105
            }
37751 ranu 1106
 
31753 tejbeer 1107
            if (args.containsOption("sendWelcomeEmail")) {
1108
                onBoardingRelatedSchelduleTask.sendWelcomeEmail();
1109
            }
29814 tejbeer 1110
 
31753 tejbeer 1111
            if (args.containsOption("partnerOnboardingLegalMigration")) {
1112
                onBoardingRelatedSchelduleTask.partnerOnboardingLegalMigration();
1113
            }
31031 amit.gupta 1114
 
33526 amit.gupta 1115
            if(args.containsOption("moveOrders")) {
1116
                runOnceTasks.moveOrders();
1117
            }
1118
 
31753 tejbeer 1119
            if (args.containsOption("addKycLegalMigration")) {
1120
                onBoardingRelatedSchelduleTask.addKycLegalMigration();
1121
            }
29776 tejbeer 1122
 
1123
 
31753 tejbeer 1124
            if (args.containsOption("pushDataToSolr")) {
1125
                listing.pushDataToSolr();
1126
            }
30120 amit.gupta 1127
 
37567 amit 1128
            // Manual run of the daily 05:30 delist. Honours the same
1129
            // catalog.autoDelist.enabled flag as the scheduled path.
1130
            if (args.containsOption("delistDeadListings")) {
1131
                listing.scheduledDelistDeadListings();
1132
            }
1133
 
31753 tejbeer 1134
            if (args.containsOption("testGstPro")) {
1135
                System.out.println("TestGstProc called");
1136
                try {
1137
                    runOnceTasks.updateIrnsToInvoices();
1138
                } catch (Exception e) {
1139
                    e.printStackTrace();
1140
                }
1141
            }
29308 tejbeer 1142
 
37058 amit 1143
            if (args.containsOption("regenerateBilledInvoices")) {
1144
                if (args.containsOption("fromTime") && args.containsOption("toTime")) {
1145
                    LocalDateTime fromTime = LocalDateTime.parse(args.getOptionValues("fromTime").get(0));
1146
                    LocalDateTime toTime = LocalDateTime.parse(args.getOptionValues("toTime").get(0));
1147
                    runOnceTasks.regenerateBilledInvoices(fromTime, toTime);
1148
                } else {
1149
                    System.out.println("regenerateBilledInvoices requires --fromTime and --toTime (ISO, e.g. 2026-06-01T00:00:00)");
1150
                }
1151
                System.exit(0);
1152
            }
1153
 
31753 tejbeer 1154
            if (args.containsOption("reverseSchemeCancelInvoice")) {
1155
                if (args.containsOption("invoice")) {
1156
                    String invoice = args.getOptionValues("invoice").get(0);
1157
                    runOnceTasks.reverseSchemes(invoice);
1158
                }
1159
            }
29863 tejbeer 1160
 
31753 tejbeer 1161
            if (args.containsOption("reverseInvalidActivation")) {
1162
                if (args.containsOption("inventoryids")) {
1163
                    String inventoryItemIdsString = args.getOptionValues("inventoryids").get(0);
1164
                    List<Integer> inventoryItemIds = new ArrayList<>();
1165
                    for (String inventoryItemIdString : inventoryItemIdsString.split(",")) {
1166
                        int inventoryItemId = Integer.parseInt(inventoryItemIdString.trim());
1167
                        inventoryItemIds.add(inventoryItemId);
1168
                    }
1169
                    runOnceTasks.reverseInvalidActivation(inventoryItemIds);
1170
                }
1171
            }
29863 tejbeer 1172
 
31753 tejbeer 1173
            if (args.containsOption("runme")) {
1174
                runOnceTasks.runMe();
1175
            }
1176
            if (args.containsOption("" + "")) {
1177
                upgradeOfferService.authenticateUser();
1178
            }
37472 amit 1179
            // Oppo and realme are one pass now, so one option drives both. Note this
1180
            // runs the FULL daily pass -- everything due today, not a 25-imei sample.
1181
            if (args.containsOption("checkBrowserImeiActivation")) {
1182
                standAlone.checkBrowserImeiActivation();
31753 tejbeer 1183
            }
30616 amit.gupta 1184
 
31753 tejbeer 1185
            /*
1186
             * if (args.containsOption("checkRealmeImeiStatus")) { try {
1187
             * standAlone.checkRealmeImeiStatus(); } catch (Exception e) {
1188
             * e.printStackTrace(); } }
1189
             */
30616 amit.gupta 1190
 
31753 tejbeer 1191
            if (args.containsOption("getCaptchaCode")) {
1192
                try {
1193
                    captchaService.getCaptchaCode("/home/amit/Desktop/generatingCodes.jpg");
1194
                } catch (Exception e) {
1195
                    e.printStackTrace();
1196
                }
1197
            }
30641 amit.gupta 1198
 
37326 amit 1199
            // --backfillMissingEwb --invoiceNumbers=A,B,C [--dryRun]
1200
            // Recovers EWB details from NIC for invoices whose IRN was recovered via DUPIRN, then
1201
            // re-renders their PDFs so the e-way bill section appears.
1202
            if (args.containsOption("backfillMissingEwb")) {
1203
                try {
1204
                    List<String> invoiceNumbers = Arrays.stream(
1205
                                    args.getOptionValues("invoiceNumbers").get(0).split(","))
1206
                            .map(String::trim).filter(x -> !x.isEmpty()).collect(Collectors.toList());
1207
                    boolean dryRun = args.containsOption("dryRun");
1208
                    System.out.println("backfillMissingEwb: " + invoiceNumbers.size()
1209
                            + " invoice(s), dryRun=" + dryRun);
1210
                    runOnceTasks.backfillMissingEwb(invoiceNumbers, dryRun);
1211
                } catch (Exception e) {
1212
                    e.printStackTrace();
1213
                }
1214
            }
1215
 
31753 tejbeer 1216
            if (args.containsOption("testIrnLive")) {
1217
                try {
1218
                    runOnceTasks.testIrnLive(args.getOptionValues("invoiceNumber").get(0));
1219
                } catch (Exception e) {
1220
                    e.printStackTrace();
1221
                }
1222
            }
30659 amit.gupta 1223
 
31753 tejbeer 1224
            if (args.containsOption("createoffercriteria")) {
1225
                try {
1226
                    runOnceTasks.createOfferCriteria();
1227
                } catch (Exception e) {
1228
                    e.printStackTrace();
1229
                }
1230
            }
30659 amit.gupta 1231
 
31753 tejbeer 1232
            if (args.containsOption("fix-price-drops")) {
1233
                runOnceTasks.fixPriceDrop();
1234
            }
29035 tejbeer 1235
 
31753 tejbeer 1236
            if (args.containsOption("processSchemeByIds")) {
1237
                List<String> schemeIds = Arrays.asList(args.getOptionValues("ids").get(0).split(","));
1238
                List<Integer> schemeIdsInt = schemeIds.stream().map(x -> Integer.parseInt(x)).collect(Collectors.toList());
1239
                runOnceTasks.processSchemeByIds(schemeIdsInt);
1240
            }
30859 tejbeer 1241
 
31753 tejbeer 1242
            if (args.containsOption("updateSaholicCISTable")) {
1243
                runOnceTasks.updateSaholicCISTable();
1244
            }
30859 tejbeer 1245
 
34579 vikas.jang 1246
            if (args.containsOption("todayBidPO")) {
34443 vikas.jang 1247
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.TODAY);
1248
            }
1249
 
34579 vikas.jang 1250
            if (args.containsOption("yesterdayBidPO")) {
1251
                runOnceTasks.processBids(ProfitMandiConstants.BID_CRON_ENUM.YESTERDAY);
1252
            }
1253
 
34547 vikas.jang 1254
            if (args.containsOption("biddingConsolidatedMessage")) {
1255
                runOnceTasks.consolidatedBiddingMessage();
1256
            }
1257
 
1258
            if (args.containsOption("sendMailWhatsAppAfterLoanDueDate")) {
1259
                scheduledTasks.sendMailWhatsAppAfterLoanDueDate();
1260
            }
1261
 
34836 vikas 1262
            if (args.containsOption("yesterdayTrackingReport")) {
1263
                runOnceTasks.yesterdayTrackingReport();
34770 vikas.jang 1264
            }
1265
 
31753 tejbeer 1266
            System.exit(0);
1267
        }
30859 tejbeer 1268
 
31753 tejbeer 1269
        if (args.containsOption("calculateInterestAccured")) {
30929 tejbeer 1270
 
31753 tejbeer 1271
            scheduledTasks.calculateInterestAccured();
1272
            System.exit(0);
1273
        }
30929 tejbeer 1274
 
31753 tejbeer 1275
        if (args.containsOption("loanSettlement")) {
30890 amit.gupta 1276
 
31753 tejbeer 1277
            scheduledTasks.loanSettlement();
1278
            System.exit(0);
1279
        }
30896 amit.gupta 1280
 
31753 tejbeer 1281
        if (args.containsOption("dailyLoanAlert")) {
30936 tejbeer 1282
 
31753 tejbeer 1283
            scheduledTasks.dailyLoanAlert();
1284
            System.exit(0);
1285
        }
30982 tejbeer 1286
 
36564 amit 1287
        if (args.containsOption("testFlagshipBilling")) {
1288
            int trId = Integer.parseInt(args.getOptionValues("testFlagshipBilling").get(0));
1289
            double amt = Double.parseDouble(args.getOptionValues("testFlagshipBillingAmount").get(0));
1290
            String inv = args.getOptionValues("testFlagshipBillingInvoice").get(0);
1291
            scheduledTasks.testFlagshipBilling(trId, amt, inv);
1292
            System.exit(0);
1293
        }
1294
 
36554 amit 1295
        if (args.containsOption("convertExpiredFlagshipCredits")) {
1296
            scheduledTasks.convertExpiredFlagshipCredits();
1297
            System.exit(0);
1298
        }
1299
 
36745 ranu 1300
        // Manual back-fill for missed-beat detection. Default: today.
1301
        // Usage: --detectMissedBeats [--date=YYYY-MM-DD]
1302
        if (args.containsOption("detectMissedBeats")) {
1303
            LocalDate date = LocalDate.now();
1304
            if (args.containsOption("date")) {
1305
                date = LocalDate.parse(args.getOptionValues("date").get(0));
1306
            }
1307
            int inserted = beatMissDetectorRunner.syncMissesForDate(date);
1308
            LOGGER.info("detectMissedBeats: {} miss rows inserted for {}", inserted, date);
1309
            System.exit(0);
1310
        }
1311
 
36554 amit 1312
        if (args.containsOption("notifyFlagshipExpiryIn2Days")) {
1313
            scheduledTasks.notifyFlagshipExpiryIn2Days();
1314
            System.exit(0);
1315
        }
1316
 
31753 tejbeer 1317
        if (args.containsOption("notifyDefaultLoans")) {
1318
            scheduledTasks.notifyDefaultLoans();
1319
            System.exit(0);
1320
        }
31446 amit.gupta 1321
 
31753 tejbeer 1322
        if (args.containsOption("fixinsurance")) {
1323
            runOnceTasks.addMissingWalletDebitsForInsurance();
1324
            System.exit(0);
1325
        }
31604 tejbeer 1326
 
31753 tejbeer 1327
        if (args.containsOption("processActivatedImeisForSchemes")) {
1328
            scheduledTasks.processActivatedImeisForSchemes();
1329
            System.exit(0);
1330
        }
31604 tejbeer 1331
 
36306 amit 1332
        if (args.containsOption("updatePartnerLimitWithBatch")) {
1333
            System.out.println("Running updatePartnerLimit with batch tracking");
1334
            batchScheduledTasks.updatePartnerLimitWithBatch();
1335
            System.exit(0);
1336
        }
1337
 
1338
        if (args.containsOption("processOffersWithBatch")) {
1339
            for (String val : args.getOptionValues("processOffersWithBatch")) {
1340
                for (String id : val.split(",")) {
1341
                    int offerId = Integer.parseInt(id.trim());
1342
                    System.out.println("Processing offer with batch: " + offerId);
1343
                    batchScheduledTasks.processOfferWithBatch(offerId);
1344
                }
1345
            }
1346
            System.exit(0);
1347
        }
1348
 
31753 tejbeer 1349
        if (args.containsOption("notifyLoanDueDateCross")) {
1350
            scheduledTasks.notifyLoanDueDateCross();
1351
            System.exit(0);
1352
        }
34275 tejus.loha 1353
        if (args.containsOption("sendTenOrMoreOrderStockReport")) {
1354
            scheduledTasks.send10OrMoreOlderStockReport();
1355
            System.exit(0);
1356
        }
31604 tejbeer 1357
 
31753 tejbeer 1358
        if (args.containsOption("alertForDueDate")) {
1359
            scheduledTasks.alertForDueDate();
1360
            System.exit(0);
1361
        }
31648 tejbeer 1362
 
31753 tejbeer 1363
        if (args.containsOption("fetchParnterStats")) {
1364
            scheduledTasks.fetchParnterStats();
1365
            System.exit(0);
1366
        }
1367
 
1368
        if (args.containsOption("morning")) {
1369
            if (args.containsOption("0")) {
1370
                scheduledTasks.sendPartnerInvestmentDetails();
1371
            }
1372
            if (args.containsOption("1")) {
1373
                scheduledTasks.sendIndentTertiary();
1374
            }
1375
            // 0
1376
            if (args.containsOption("2")) {
1377
                scheduledTasks.calculateInterestAccured();
1378
            }
1379
            System.out.println("scheduledTasks.calculateInterestAccured()");
1380
            // 0
1381
            if (args.containsOption("3")) {
32831 amit.gupta 1382
                orderTrackingService.markDelhiveryOrderDelivered();
31753 tejbeer 1383
            }
1384
            System.out.println("scheduledTasks.markDelhiveryOrderDelivered()");
1385
            // 1
1386
            if (args.containsOption("4")) {
1387
                scheduledTasks.processActivatedImeisForSchemes();
1388
            }
1389
            System.out.println("scheduledTasks.processActivatedImeisForSchemes()");
1390
            // 2
1391
            if (args.containsOption("5")) {
1392
                scheduledTasks.processActivation();
1393
            }
1394
            System.out.println("scheduledTasks.processActivation()");
1395
            // 4
1396
            if (args.containsOption("6")) {
1397
                scheduledTasks.processPriceDrop();
1398
            }
1399
            System.out.println("scheduledTasks.processPriceDrop()");
1400
            // 5
1401
            if (args.containsOption("7")) {
1402
                scheduledTasks.loanSettlement();
1403
            }
1404
            System.out.println("scheduledTasks.loanSettlement()");
36554 amit 1405
            if (args.containsOption("7a")) {
1406
                scheduledTasks.convertExpiredFlagshipCredits();
1407
                scheduledTasks.notifyFlagshipExpiryIn2Days();
1408
            }
1409
            System.out.println("scheduledTasks.convertExpiredFlagshipCredits()");
31753 tejbeer 1410
            // 8
1411
            if (args.containsOption("8")) {
1412
                scheduledTasks.reviewUncontactablePartner();
1413
            }
1414
            // 9
33859 tejus.loha 1415
//            if (args.containsOption("9")) {
1416
//                onBoardingRelatedSchelduleTask.storeTimelinePromoterPending();
1417
//            }
1418
//            // 9
1419
//            if (args.containsOption("10")) {
1420
//                onBoardingRelatedSchelduleTask.advancePaymentPendinglegalAlert();
1421
//            }
31753 tejbeer 1422
            // sendPartnerInvestment
1423
            if (args.containsOption("11")) {
1424
                scheduledTasks.sendPartnerInvestmentDetails();
1425
            }
37236 amit 1426
            if (args.containsOption("1")) {
36993 amit 1427
                // Defaults to a dry-run (harmless dev path); pass --live to run the real pipeline.
1428
                boolean dryRun = !args.containsOption("live");
1429
                System.out.println("Calling sendCreditNote (dryRun=" + dryRun + ")");
34029 ranu 1430
                YearMonth yearMonth = YearMonth.now().minusMonths(1);
36993 amit 1431
                scheduledTasks.sendCreditNote(yearMonth, dryRun);
31753 tejbeer 1432
            }
37238 amit 1433
            if (args.containsOption("regenMarginIrns")) {
1434
                // One-time: generate missing IRNs for issued margin CN/DNs (mixed-sign docs
1435
                // now netted per GST rate in the payload). Dry-run by default; --live to run.
1436
                boolean dryRun = !args.containsOption("live");
1437
                try {
1438
                    String ymStr = args.getOptionValues("regenMarginIrns").isEmpty() ? null : args.getOptionValues("regenMarginIrns").get(0);
1439
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1440
                    System.out.println("regenMarginIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1441
                    scheduledTasks.regenMarginIrns(yearMonth, dryRun);
1442
                    System.out.println("regenMarginIrns completed successfully");
1443
                } catch (Exception e) {
1444
                    System.err.println("regenMarginIrns FAILED: " + e.getMessage());
1445
                    e.printStackTrace(System.err);
1446
                }
1447
            }
37236 amit 1448
            if (args.containsOption("cancelMarginDnIrns")) {
1449
                // One-time: cancel IRNs of margin DNs inflated by the abs bug (24h NIC window!)
1450
                // and mark them cancelled so a sendCreditNote rerun reissues corrected DNs.
1451
                // Defaults to dry-run; pass --live to actually cancel.
1452
                boolean dryRun = !args.containsOption("live");
1453
                try {
1454
                    String ymStr = args.getOptionValues("cancelMarginDnIrns").isEmpty() ? null : args.getOptionValues("cancelMarginDnIrns").get(0);
1455
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1456
                    System.out.println("cancelMarginDnIrns for " + yearMonth + " (dryRun=" + dryRun + ")");
1457
                    scheduledTasks.cancelMarginDnIrns(yearMonth, dryRun);
1458
                    System.out.println("cancelMarginDnIrns completed successfully");
1459
                } catch (Exception e) {
1460
                    System.err.println("cancelMarginDnIrns FAILED: " + e.getMessage());
1461
                    e.printStackTrace(System.err);
1462
                }
1463
            }
37232 amit 1464
            if (args.containsOption("corrMarginCNs")) {
1465
                // One-time corrective CNs against wrongly-inflated margin DNs.
1466
                // Defaults to dry-run; pass --live to issue real documents.
1467
                boolean dryRun = !args.containsOption("live");
1468
                try {
1469
                    String ymStr = args.getOptionValues("corrMarginCNs").isEmpty() ? null : args.getOptionValues("corrMarginCNs").get(0);
1470
                    YearMonth yearMonth = ymStr != null && !ymStr.isEmpty() ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1471
                    System.out.println("corrMarginCNs for " + yearMonth + " (dryRun=" + dryRun + ")");
1472
                    scheduledTasks.corrMarginCNs(yearMonth, dryRun);
1473
                    System.out.println("corrMarginCNs completed successfully");
1474
                } catch (Exception e) {
1475
                    System.err.println("corrMarginCNs FAILED: " + e.getMessage());
1476
                    e.printStackTrace(System.err);
1477
                }
1478
            }
36220 amit 1479
            if (args.containsOption("genDNs")) {
1480
                System.out.println("Calling genDNs");
36254 amit 1481
                try {
1482
                    String ymStr = args.getOptionValues("genDNs").isEmpty() ? null : args.getOptionValues("genDNs").get(0);
1483
                    YearMonth yearMonth = ymStr != null ? YearMonth.parse(ymStr) : YearMonth.now().minusMonths(1);
1484
                    System.out.println("genDNs for " + yearMonth);
1485
                    scheduledTasks.genDNs(yearMonth);
1486
                    System.out.println("genDNs completed successfully");
1487
                } catch (Exception e) {
1488
                    System.err.println("genDNs FAILED: " + e.getMessage());
1489
                    e.printStackTrace(System.err);
1490
                }
36220 amit 1491
            }
36503 amit 1492
            if (args.containsOption("genDNsForCNs")) {
1493
                System.out.println("Calling genDNsForCNs");
1494
                try {
1495
                    String cnList = args.getOptionValues("genDNsForCNs").get(0);
1496
                    List<String> cnNumbers = Arrays.asList(cnList.split(","));
1497
                    System.out.println("genDNsForCNs for " + cnNumbers.size() + " CNs: " + cnNumbers);
1498
                    scheduledTasks.genDNsForCNs(cnNumbers);
1499
                    System.out.println("genDNsForCNs completed successfully");
1500
                } catch (Exception e) {
1501
                    System.err.println("genDNsForCNs FAILED: " + e.getMessage());
1502
                    e.printStackTrace(System.err);
1503
                }
1504
            }
36433 amit 1505
            System.exit(0);
1506
        }
1507
 
31753 tejbeer 1508
    }
24848 amit.gupta 1509
}