Rev 35268 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<!-- offer_scratch.vm --><style>.gift-row td {vertical-align: top !important;}.dynamic-table {margin-top: 15px;}.date-picker {background: white !important;cursor: pointer;}body.modal-open {overflow: hidden;}</style><style>/* The switch container */.switch-small {position: relative;display: inline-block;width: 40px;height: 20px;}/* Hide default HTML checkbox */.switch-small input {opacity: 0;width: 0;height: 0;}/* The slider */.slider-small {position: absolute;cursor: pointer;top: 0;left: 0;right: 0;bottom: 0;background-color: #ccc;transition: .4s;}/* The slider knob */.slider-small:before {position: absolute;content: "";height: 16px;width: 16px;left: 2px;bottom: 2px;background-color: white;transition: .4s;}/* Change background when checked (blue by default) */.switch-small input:checked + .slider-small {background-color: #2196F3;}/* Focus effect */.switch-small input:focus + .slider-small {box-shadow: 0 0 1px #2196F3;}/* Move the slider knob when checked */.switch-small input:checked + .slider-small:before {transform: translateX(20px);}/* Rounded slider */.slider-small.round {border-radius: 20px;}.slider-small.round:before {border-radius: 50%;}.switch-small input:checked + .slider-small {background-color: #28a745; /* Bright green for active */}.switch-small input:not(:checked) + .slider-small {background-color: #dc3545; /* Bright red for inactive */}</style><section class="wrapper"><div class="row"><div class="col-lg-12"><h3 class="page-header"><i class="fa fa-gift"></i> Scratch Offers</h3><ol class="breadcrumb"><li><i class="fa fa-home"></i><a href="${rc.contextPath}/dashboard">Home</a></li><li><i class="fa fa-gift"></i>Offers</li><li class="pull-right"><button class="btn btn-primary new-offer-btn" data-toggle="modal" data-target="#offerModal"><i class="fa fa-plus-circle"></i> Create New Offer</button></li></ol></div></div><div class="table-responsive"><table class="table table-striped table-bordered" id="scratchOfferTable"><thead><tr><th>Offer Name</th><th>Offer Type</th><th>Scratch Validity</th><th>Offer Duration</th><th>Offer Classification</th><th>Offer Image</th><th>Active</th><th>Action</th></tr></thead><tbody>#foreach($offer in $offerList)<tr><td>$offer.name</td><td>$offer.offerType</td><td>$offer.scratchValidity Days</td><td>$offer.startDate - $offer.endDate</td><td>$offer.classification</td><td>#foreach($imageId in $offer.offerImage.split(","))<img src="/document/$imageId" width="50" style="margin: 2px;">#end</td><td><label class="switch-small" data-offer-id="$offer.id"><input type="checkbox" name="isActive" #if($offer.active) checked #end><span class="slider-small round"></span></label></td><td class="text-center align-middle"><button class="delete-offer btn btn-sm btn-danger" value="$offer.id"><i class="fa fa-trash"></i></button><button class="edit-offer btn btn-sm btn-primary" data-toggle="modal"data-target="#editOfferModal" value="$offer.id"><i class="fa fa-pencil-square-o"></i></button></td></tr>#end</tbody></table></div></section><div class="modal fade" id="offerModal" tabindex="-1" role="dialog" style="height: auto; overflow-y: scroll"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal">×</button><h4 class="modal-title">Create New Scratch Offer</h4></div><div class="modal-body"><form id="offerForm"><div class="row"><div class="col-md-6"><div class="form-group"><label>Offer Name <span class="text-danger">*</span> </label><input type="text" class="form-control" name="name" required placeholder="Offer Name"></div><div class="form-group"><label>Description <span class="text-danger">*</span></label><textarea class="form-control" name="description" rows="3"placeholder="Short description visible to customers"></textarea></div><div class="form-group"><label>Offer Images <span class="text-danger">*</span></label><small class="text-danger text-small"> Multiple Images Accepted</small><div class="offer-images-container"><div class="offer-image-entry"><input type="file" class="form-control offer-image-file"accept="image/*" multiple required><input type="hidden" class="offer-image-id" name="offerImageIds[]"></div></div></div></div><div class="col-md-6"><div class="form-group"><label>Offer Period <span class="text-danger">*</span></label><div class="input-daterange input-group"><input type="date" class="form-control date-picker" name="start_date" required><span class="input-group-addon">to</span><input type="date" class="form-control date-picker" name="end_date" required></div></div><div class="form-group"><label>Product Category <span class="text-danger">*</span></label><select class="form-control" name="productCategory" multiple required>#foreach($category in $categoryList)<option value="$category.id">$category.displayName</option>#end</select></div><div class="form-group"><label>Payment Method <span class="text-danger">*</span></label><select class="form-control" name="paymentMethod" required multiple>#foreach($paymentMethod in $paymentMethods)<option value="$paymentMethod">$paymentMethod</option>#end</select></div><div class="form-group"><label>Offer Classification <span class="text-danger">*</span></label><select class="form-control classification" name="classification" required><option selected disabled value="">Select Classification</option>#foreach($classification in $classifications)<option value="$classification">$classification</option>#end</select></div></div></div><div class="row"><div class="col-md-6"><div class="form-group"><label>User Limit <span class="text-danger">*</span></label><input type="number" class="form-control" name="userLimit"placeholder="Max redemptions per day"></div></div><div class="col-md-6"><div class="form-group"><label>Scratch Validity (Days) <span class="text-danger">*</span></label><input type="number" class="form-control" name="scratchValidity"placeholder="Scratch Validity"></div></div></div><div class="form-check form-switch hidden"><p class="">Offer Status</p><inputclass="form-check-input"type="checkbox"id="flexSwitchCheckActive"name="isActive"checked><label class="form-check-label" for="flexSwitchCheckActive">Active</label></div><div class="table-responsive"><table class="table dynamic-table"><thead><tr><th colspan="2">Gift Configuration</th><th colspan="3" class="text-end"><button type="button" class="btn btn-sm btn-success add-gift"><i class="fa fa-plus"></i> Add Gift</button></th></tr><tr><th colspan="2">Basic Information</th><th colspan="3">Additional Details</th></tr></thead><tbody><tr class="gift-row"><!-- First Column --><td colspan="2"><div class="mb-3"><label class="fw-bold"> <strong class="text-black">Default</strong></label><input type="radio" name="defaultGift" class="default-gift-radio" checked></div><div class="row"><div class="col-md-12 mb-3"><label>Gift Name <span class="text-danger">*</span></label><input type="text" class="form-control gift-name" name="name"placeholder="Gift Name" required></div></div><div class="row"><div class="col-md-6 mb-3"><label>Min Cart Value <span class="text-danger">*</span></label><input type="number" step="0.01" class="form-control gift-min-cart"name="minCartValue" placeholder="Min Cart Value" required></div><div class="col-md-6 mb-3"><label>Max Cart Value <span class="text-danger">*</span></label><input type="number" step="0.01" class="form-control gift-max-cart"name="maxCartValue" placeholder="Max Cart Value" required></div></div><div class="row"><div class="col-md-6 mb-3"><label>Gift Quantity <span class="text-danger">*</span></label><input type="number" class="form-control gift-redemptions"name="maxRedemptions" placeholder="Gift Quantity" required></div><div class="mb-3 col-md-6"><label> Select Partner Store OR <span class="text-danger">*</span></label><select class="form-control partnerInfo mb-2" name="partnerInfo" multiple>#foreach($retailer in $retailerInfo)<option value="$retailer.getPartnerId()">$retailer.getBusinessName()</option>#end</select></div></div></td><!-- Second Column --><td colspan="3"><div class="mb-3"><label>Gift Image <span class="text-danger">*</span></label><input type="file" class="form-control gift-thumbnail-file" accept="image/*"required><input type="hidden" class="gift-thumbnail-id" name="thumbnailDocumentId"></div><div class="mb-3"><label>Product Category <span class="text-danger ">*</span></label><select class="form-control gift-product-category" name="productCategory"multiple required>#foreach($category in $categoryList)<option value="$category.id">$category.displayName</option>#end</select></div><div class="mb-3 "><label for="fofo-store-id" class="text-center">Upload CSV</label><input type="file" class="form-control fofo-store-file mt-2" accept=".csv"><input type="hidden" class="fofo-store-id" name="fofoStore"><small class="text-muted">CSV format: S.No,Partner Name,FofoId,Code</small></div></td></tr></tbody></table></div><div class="form-group"><label>Terms & Conditions <span class="text-danger">*</span></label><textarea class="form-control" name="termsCondition" rows="3"placeholder="Terms & Conditions"></textarea></div></form></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button><button type="button" class="btn btn-primary submit-offer">Save Offer</button></div></div></div></div><div class="modal fade" id="editOfferModal" tabindex="-1" role="dialog" style="height: auto; overflow-y: scroll"><div class="modal-dialog modal-lg" role="document"><div class="modal-content modal-dialog-scrollable" id="edit-modal-content"></div></div></div><script>$(function () {initMultiselect('select[name="productCategory"]', 'Categories')initMultiselect('select[name="partnerInfo"]', 'Partner')initMultiselect('select[name="paymentMethod"]', 'Payment method')})$(document).on('change', '.partnerInfo', function () {const partnerSelect = $(this);const csvInput = partnerSelect.closest('tr').find('.fofo-store-file');if (partnerSelect.val() && partnerSelect.val().length > 0) {// Partner selected → disable CSVcsvInput.prop('disabled', true).val('');} else {// No partner selected → enable CSVcsvInput.prop('disabled', false);}});</script><script>$(function () {$('#scratchOfferTable').DataTable({"bPaginate": true,"bLengthChange": true,"bFilter": true,"bInfo": false,"bAutoWidth": false,"pageLength": 20,});});$(document).on('change', '.default-gift-radio', function () {if ($(this).is(':checked')) {$('.default-gift-radio').not(this).prop('checked', false);}});</script>