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
         }
 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):
     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'),
         )
示例#9
0
 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)