import csv
from .models import TicketCode
__author__ = 'alfred'
[docs]class BaseImporter:
label = 'Base importer'
def __init__(self, csv_file=None):
self.reader = None
if csv_file:
self.create_reader(csv_file)
[docs] def create_reader(self, csv_file):
self.reader = csv.reader(csv_file)
[docs] def iter_tickets(self):
for row in self.reader:
ticket = TicketCode()
self.map_to_ticket(ticket, row)
yield ticket
[docs] def map_to_ticket(self, ticket, row):
ticket.code = row[0]
ticket.ticket_number = row[2]
ticket.status = row[3]
ticket.external_id = row[8] or row[1]
ticket.external_customer_name = row[9]
ticket.external_fiscal_number = row[10]
ticket.external_locator = row[11]
[docs]class ImporterManager:
def __init__(self):
self.importers = {}
[docs] def register(self, name, importer_cls):
self.importers[name] = importer_cls
[docs] def unregister(self, name):
del self.importers[name]
[docs] def get_select_options(self):
return ((name, cls.label) for name, cls in self.importers.items())
[docs] def create_importer(self, name, csv_file):
return self.importers[name](csv_file)
importer_manager = ImporterManager()
[docs]class DefaultImporter(BaseImporter):
label = 'Tarrab.me'
importer_manager.register('tarrabme', DefaultImporter)
[docs]class AtrapaloImporter(BaseImporter):
label = 'Atrapalo'
[docs] def map_to_ticket(self, ticket, row):
ticket.code = row[0]
ticket.external_customer_name = row[1]
ticket.external_fiscal_number = row[2]
ticket.external_locator = row[3]
ticket.external_id = row[4]
importer_manager.register('atrapalo', AtrapaloImporter)
[docs]class TicketeaImporter(BaseImporter):
label = 'Ticketea'
[docs] def map_to_ticket(self, ticket, row):
ticket.code = row[0]
ticket.external_locator = row[1]
ticket.external_customer_name = row[2]
importer_manager.register('ticketea', TicketeaImporter)
[docs]class ProductesDeLaTerraImporter(BaseImporter):
label = 'Productes de la terra'
[docs] def map_to_ticket(self, ticket, row):
ticket.code = row[0]
ticket.external_customer_name = row[2]
ticket.external_locator = row[3]
importer_manager.register('productesdelaterra', ProductesDeLaTerraImporter)