def validator(node, value): if not is_allowed_file_size(value.file): raise colander.Invalid( node, _(u'File is too big') ) if not request.storage.file_allowed(value, extensions=('csv')): raise colander.Invalid( node, _(u'This files types is not allowed')) value.file.seek(0)
def _action(self): form = PersonsImportForm(self.request) if form.validate(): form.submit() return { 'success_message': _(u'Task will start soon'), 'response': None } else: return { 'error_message': _(u'Please, check errors'), 'errors': form.errors }
class _PersonsImportSchema(_PassportImportSchema, _ForeignPassportImportSchema): file = colander.SchemaNode(File(), validator=extensions_validator) first_name = colander.SchemaNode( colander.Integer(), validator=colander.All( colander.Range(min=1, min_err=_(u'Set num of column'))), ) second_name = colander.SchemaNode(colander.Integer(), ) last_name = colander.SchemaNode( colander.Integer(), validator=colander.All( colander.Range(min=1, min_err=_(u'Set num of column'))), ) phones = colander.SchemaNode(colander.Integer(), ) emails = colander.SchemaNode(colander.Integer(), )
def validator(node, value): passport_num = request.params.get('passport_num') passport_country = request.params.get('passport_country') if value == 0 and any([ passport_num != '0', passport_country != '0', ]): raise colander.Invalid( node, _(u'Set num of column'), )
def validator(node, value): foreign_passport_end_date = request.params.get( 'foreign_passport_end_date') foreign_passport_num = request.params.get('foreign_passport_num') foreign_passport_country = request.params.get( 'foreign_passport_country') if value == 0 and any([ foreign_passport_end_date != '0', foreign_passport_num != '0', foreign_passport_country != '0' ]): raise colander.Invalid( node, _(u'Set num of column'), )
def validator(node, value): foreign_passport_end_date = request.params.get( 'foreign_passport_end_date' ) foreign_passport_num = request.params.get('foreign_passport_num') foreign_passport_country = request.params.get( 'foreign_passport_country' ) if value == 0 and any([ foreign_passport_end_date != '0', foreign_passport_num != '0', foreign_passport_country != '0' ]): raise colander.Invalid( node, _(u'Set num of column'), )
def allowed_permisions(self): return [ ('import', _(u'import')), ]
def _persons_import(employee_id, delimiter, quotechar, **kwargs): csv_path = kwargs.pop('upload_path') employee = Employee.get(employee_id) owner_structure = get_employee_structure(employee) log.info('Start persons import') with open(csv_path, 'rb') as csvfile: reader = csv.reader( csvfile, delimiter=delimiter, quotechar=quotechar ) for row in reader: person = Person( resource=Resource(PersonsResource, owner_structure) ) if kwargs.get('first_name'): person.first_name = row[kwargs.get('first_name') - 1] if kwargs.get('second_name'): person.second_name = row[kwargs.get('second_name') - 1] if kwargs.get('last_name'): person.last_name = row[kwargs.get('last_name') - 1] if kwargs.get('phones'): phones = row[kwargs.get('phones') - 1] for phone in phones.split(): person.contacts.append( Contact( resource=Resource( ContactsResource, owner_structure ), contact_type='phone', status='active', contact=phone ) ) if kwargs.get('emails'): emails = row[kwargs.get('emails') - 1] for email in emails.split(): person.contacts.append( Contact( resource=Resource( ContactsResource, owner_structure ), contact_type='email', status='active', contact=email ) ) if kwargs.get('passport_country') and kwargs.get('passport_num'): country = Country.by_iso_code( row[kwargs.get('passport_country') - 1] ) passport = Passport( resource=Resource( PassportsResource, owner_structure ), passport_type='citizen', country=country, num=row[kwargs.get('passport_num') - 1] ) person.passports.append(passport) if ( kwargs.get('foreign_passport_country') and kwargs.get('foreign_passport_num') and kwargs.get('foreign_passport_end_date') ): country = Country.by_iso_code( row[kwargs.get('foreign_passport_country') - 1] ) passport = Passport( resource=Resource( PassportsResource, owner_structure ), passport_type='foreign', country=country, num=row[kwargs.get('foreign_passport_num') - 1], end_date=datetime.strptime( row[kwargs.get('foreign_passport_end_date') - 1], '%Y-%m-%d' ) ) person.passports.append(passport) with transaction.manager: DBSession.add(person) with transaction.manager: notification = Notification( title=_(u'Persons import status'), descr=_(u'Persons import was completed'), resource=Resource(NotificationsResource, owner_structure) ) employee.notifications.append(notification)
def _persons_import(employee_id, delimiter, quotechar, **kwargs): csv_path = kwargs.pop('upload_path') employee = Employee.get(employee_id) owner_structure = get_employee_structure(employee) log.info('Start persons import') with open(csv_path, 'rb') as csvfile: reader = csv.reader(csvfile, delimiter=delimiter, quotechar=quotechar) for row in reader: person = Person( resource=Resource(PersonsResource, owner_structure)) if kwargs.get('first_name'): person.first_name = row[kwargs.get('first_name') - 1] if kwargs.get('second_name'): person.second_name = row[kwargs.get('second_name') - 1] if kwargs.get('last_name'): person.last_name = row[kwargs.get('last_name') - 1] if kwargs.get('phones'): phones = row[kwargs.get('phones') - 1] for phone in phones.split(): person.contacts.append( Contact(resource=Resource(ContactsResource, owner_structure), contact_type='phone', status='active', contact=phone)) if kwargs.get('emails'): emails = row[kwargs.get('emails') - 1] for email in emails.split(): person.contacts.append( Contact(resource=Resource(ContactsResource, owner_structure), contact_type='email', status='active', contact=email)) if kwargs.get('passport_country') and kwargs.get('passport_num'): country = Country.by_iso_code( row[kwargs.get('passport_country') - 1]) passport = Passport(resource=Resource(PassportsResource, owner_structure), passport_type='citizen', country=country, num=row[kwargs.get('passport_num') - 1]) person.passports.append(passport) if (kwargs.get('foreign_passport_country') and kwargs.get('foreign_passport_num') and kwargs.get('foreign_passport_end_date')): country = Country.by_iso_code( row[kwargs.get('foreign_passport_country') - 1]) passport = Passport( resource=Resource(PassportsResource, owner_structure), passport_type='foreign', country=country, num=row[kwargs.get('foreign_passport_num') - 1], end_date=datetime.strptime( row[kwargs.get('foreign_passport_end_date') - 1], '%Y-%m-%d')) person.passports.append(passport) with transaction.manager: DBSession.add(person) with transaction.manager: notification = Notification(title=_(u'Persons import status'), descr=_(u'Persons import was completed'), resource=Resource(NotificationsResource, owner_structure)) employee.notifications.append(notification)
def validator(node, value): if not is_allowed_file_size(value.file): raise colander.Invalid(node, _(u'File is too big')) if not request.storage.file_allowed(value, extensions=('csv')): raise colander.Invalid(node, _(u'This files types is not allowed')) value.file.seek(0)