Modelo de assinatura OpenCart (x meses)

Estou montando um site de comércio eletrônico usando o OpenCart e quero oferecer assinaturas. Especificamente 3/6/12 meses de inscrição. Eu não estou interessado em faturamento recorrente (estou ciente de que existem módulos para PayPal e Authorize.net). Eu quero que os usuários paguem uma vez antecipadamente. Isso se traduz em 3 pseudo-produtos do ponto de vista da configuração? Eu acho que isso é viável, até agora, apenas com a configuração do produto. 3 produtos, cada um com um preço.

Aqui vem a parte complicada. Para cada mês que os usuários pagam, eles têm acesso para solicitar um produto, apenas uma vez por mês, dentro de seu "ciclo de faturamento". Então, se um usuário paga por uma assinatura de 3 meses em 23/5:

ele pode obter um produto no período 23 / 5-22 / 6,um em 23 / 6-22 / 7, eum em 23 / 7-22 / 8

Um usuário não deve poder pedir mais de um produto por mês, e ele também não poderá obter nenhum produto depois de 22/8, a menos que renove sua assinatura. Além disso, seria fantástico se eu pudesse ter um cron job, verificando se um usuário utilizou sua assinatura para o mês atual e enviar um e-mail de lembrete "Ei, consiga seu produto para este mês".

Este é o meu primeiro projeto OpenCart, eu passei pela documentação e pesquisei muito no Google, joguei com uma instalação local, e estou tentando descobrir se o que estou pedindo é viável sem modificar o código principal, eu gostaria de evite isso. No entanto, se não houver outra maneira, entendo que o OpenCart é um framework MVC (+ L (linguagem)), mas não encontrei nenhuma documentação sólida sobre como customizar sua funcionalidade, apenas bits e partes para requisitos específicos.

Se eu puder, gostaria de escrever, o que tenho em mente, por favor, avise se isso soa bem:

Eu gostaria de adicionar mais uma entidade (objeto / modelo) para armazenar a assinatura, o usuário ao qual ela pertence, data de início e término e se ela foi utilizada. Basicamente, uma assinatura é uma ordem normal e eu gostaria que ela fosse armazenada como uma, eu só preciso persistir mais alguns campos. Como eu disse, preciso executar duas verificações:O usuário utilizou sua assinatura para o mês atual? Para isso, eu estava pensando em ter um sinalizador "isUsed", que pode ser redefinido com um cron job, toda vez que um usuário atinge sua data de faturamento. (no nosso exemplo 23/6, 23/7). Alternativamente, eu poderia adicionar 3 entradas, uma para cada ciclo de faturamento e atualizá-las de acordo.A assinatura expirou? Eu poderia verificar a data de expiração da assinatura.

Não tenho ideia de como conectar essa funcionalidade durante o checkout ou como começar a implementar isso.

Eu passei pelo fórum e pesquisei pesadamente, mas ainda não encontrei uma resposta. Eu sou um experiente desenvolvedor Grails / Java EE, então eu sou bastante técnico no caso deste post ficar muito técnico :-)

O som acima é viável e estou no caminho certo?

Felicidades,
Iraklis

questionAnswers(1)

yourAnswerToTheQuestion