class OrderResource(resources.ModelResource): # product = Field( # attribute='product', # column_name='product', # widget=ForeignKeyWidget(Product, 'pk') # ) # warehouse = Field( # attribute='warehouse', # column_name='warehouse', # widget=ForeignKeyWidget(Warehouse, 'pk') # ) # customer = Field( # attribute='customer', # column_name='customer', # widget=ForeignKeyWidget(Customer, 'pk') # ) # circuit = Field( # attribute='circuit', # column_name='circuit', # widget=ForeignKeyWidget(Circuit, 'pk') # ) ordered_at = Field( attribute='ordered_at', column_name='ordered_at', widget=DateWidget(), ) ordered_quantity = Field( attribute='ordered_quantity', column_name='ordered_quantity', widget=IntegerWidget(), ) # reference = Field( # attribute='reference', # column_name='order_reference', # widget=DateWidget(), # ) class Meta: model = Order skip_unchanged = True report_skipped = True import_id_fields = ( 'circuit', 'warehouse', 'product', 'category', 'ordered_quantity', 'ordered_at', ) exclude = ('id', )
class StudentTutionPaymentResource(resources.ModelResource): students = fields.Field(column_name='students', attribute='students', widget=ForeignKeyWidget(Student, 'students')) sessions = fields.Field(column_name='sessions', attribute='sessions', widget=ForeignKeyWidget(Session, 'name')) class_name = fields.Field(column_name='class_name', attribute='class_name', widget=ForeignKeyWidget(Class, 'name')) payment_completed = fields.Field(column_name='payment_completed', attribute='payment_completed', widget=BooleanWidget()) school_fees = fields.Field(column_name='school_fees', attribute='school_fees', widget=IntegerWidget()) total_payment = fields.Field(column_name='paid', attribute='paid', widget=IntegerWidget())
class BoxApplicationsResources(resources.ModelResource): """盒子申请信息导入导出""" application_id = Field(column_name="申请编号", attribute='id', default=None) contract_id = Field(column_name="合同号", attribute='contract_number', widget=ForeignKeyWidget(ContractsInfo, 'contract_number'), default=None) amount = Field(column_name="申请数量", attribute='amount', widget=IntegerWidget()) classification = Field(column_name="申请类别", attribute='classification') address_name = Field(column_name="收件人姓名", attribute='address_name') address_phone = Field(column_name="收件人号码", attribute='address_phone') send_address = Field(column_name="邮寄地址", attribute='send_address') box_price = Field(column_name="盒子单价", attribute='box_price', default=None) detection_price = Field(column_name="检测单价", attribute='detection_price', default=None) use = Field(column_name="用途", attribute='use') proposer = Field(column_name="申请人", attribute='proposer', default=None) submit_time = Field(column_name="提交时间", attribute='submit_time', widget=DateWidget('%Y-%m-%d')) approval_status = Field(column_name="审批状态", attribute='approval_status') box_submit_flag = Field(column_name="是否提交", attribute='box_submit_flag') class Meta: model = BoxApplications fields = ('application_id', 'contract_id', 'amount', 'classification', 'address_name', 'address_phone', 'send_address', 'box_price', 'detection_price', 'use', 'proposer', 'submit_time', 'approval_status', 'box_submit_flag') export_order = ('application_id', 'contract_id', 'amount', 'classification', 'address_name', 'address_phone', 'send_address', 'box_price', 'detection_price', 'use', 'proposer', 'submit_time', 'approval_status', 'box_submit_flag') skip_unchanged = True import_id_fields = ['application_id'] def get_export_headers(self): export_headers = [ u'申请编号', u'合同号', u'申请数量', u'申请类别', u'收件人姓名', u'收件人号码', u'邮寄地址', u'盒子单价', u'检测单价', u'用途', u'申请人', u'提交时间', u'审批状态', u'是否提交' ] return export_headers
class SolicitudHWResource(resources.ModelResource): ni_ingeniero = fields.Field(column_name='ni ingeniero', attribute='ni_ingeniero', widget=ForeignKeyWidget( Perfil, 'nombre_completo')) asignacion_ni = fields.Field(column_name='asignacion ni', attribute='asignacion_ni', widget=ForeignKeyWidget(AsignacionNi, 'pk')) estacion = fields.Field( column_name='estacion', attribute='estacion__nombre', ) actividad = fields.Field(column_name='actividad', attribute='actividad', widget=ForeignKeyWidget(Actividad, 'pk')) wp = fields.Field(column_name='wp', attribute='wp', widget=IntegerWidget()) estado_solicitud = fields.Field( column_name='estado solicitud', attribute='estado_solicitud', ) creado = fields.Field(column_name='creado', attribute='creado', widget=DateWidget(format='%d/%m/%Y')) actualizado = fields.Field(column_name='actualizado', attribute='actualizado', widget=DateWidget(format='%d/%m/%Y')) def for_delete(self, row, instance): return self.fields['subestado'].clean(row) class Meta: model = SolicitudHW # exclude = ('',) export_order = ( 'id', 'ni_ingeniero', 'asignacion_ni', 'estacion', 'actividad', 'wp', 'estado_solicitud', 'creado', 'actualizado', 'estado', 'subestado', )
class PatientResource(resources.ModelResource): codigo = fields.Field(column_name='Código', attribute='codigo') sexo = fields.Field(column_name='Sexo', attribute='sexo', widget=SexoWidget()) edad = fields.Field(column_name='Edad', attribute='edad', widget=IntegerWidget()) vih = fields.Field(column_name='¿Tiene VIH/AIDS?', attribute='vih', widget=MyBoolWidget()) diabetes = fields.Field(column_name='¿Tiene diabetes?', attribute='diabetes', widget=MyBoolWidget()) hab_calle = fields.Field(column_name='¿Es habitante de calle?', attribute='hab_calle', widget=MyBoolWidget()) info_clinica = fields.Field(column_name='Información Clínica', attribute='info_clinica', widget=MyBoolWidget()) observaciones = fields.Field(column_name='Observaciones', attribute='observaciones') fecha_creacion = fields.Field(column_name='Fecha de creación', attribute='fecha_creacion') class Meta: model = Patient fields = ( 'codigo', 'edad', 'sexo', 'vih', 'diabetes', 'hab_calle', 'info_clinica', 'observaciones', 'fecha_creacion', ) export_order = fields
class DegradacionResource(resources.ModelResource): perfil = fields.Field(column_name='perfil', attribute='perfil', widget=ForeignKeyWidget(Perfil, 'nombre_completo')) estacion = fields.Field( column_name='estacion', attribute='estacion__nombre', ) actividad = fields.Field(column_name='actividad', attribute='actividad', widget=ForeignKeyWidget(Actividad, 'pk')) wp = fields.Field(column_name='wp', attribute='wp', widget=IntegerWidget()) contenido = fields.Field( column_name='contenido', attribute='contenido', ) creado = fields.Field(column_name='creado', attribute='creado', widget=DateTimeWidget(format='%d/%m/%Y %H:%M:%S')) actualizado = fields.Field( column_name='actualizado', attribute='actualizado', widget=DateTimeWidget(format='%d/%m/%Y %H:%M:%S')) class Meta: model = Degradacion exclude = ('imagen') export_order = ( 'id', 'perfil', 'estacion', 'actividad', 'wp', 'contenido', 'creado', 'actualizado', )
class DeliveryResource(resources.ModelResource): # product = Field( # attribute='product', # column_name='product', # widget=ForeignKeyWidget(Product, 'pk') # ) # warehouse = Field( # attribute='warehouse', # column_name='warehouse', # widget=ForeignKeyWidget(Warehouse, 'pk') # ) # customer = Field( # attribute='customer', # column_name='customer', # widget=ForeignKeyWidget(Customer, 'pk') # ) # circuit = Field( # attribute='circuit', # column_name='circuit', # widget=ForeignKeyWidget(Circuit, 'pk') # ) delivered_at = Field( attribute='delivered_at', column_name='delivered_at', widget=DateWidget(), ) delivered_quantity = Field( attribute='delivered_quantity', column_name='delivered_quantity', widget=IntegerWidget(), ) # reference = Field( # attribute='reference', # column_name='order_reference', # widget=DateWidget(), # ) class Meta: model = Delivery skip_unchanged = True report_skipped = True import_id_fields = ( 'circuit', 'warehouse', 'product', 'category', 'delivered_quantity', 'delivered_at', ) exclude = ('id', ) # use_transactions = True # use_bulk = True # skip_diff = True # chunk_size = 20 # def get_queryset(self): # ''' Select related object data with the query ''' # return super().get_queryset().select_related('circuit', 'warehouse', 'product', 'customer') # .all() def before_import_row(self, row, **kwargs): # Clean numeric fields if not str(row.get('delivered_quantity')).isnumeric(): row['delivered_quantity'] = None # # Get or create nested models # (product_model, _created) = Product.objects.get_or_create( # reference=row.get('product'), # # name=row.get('product'), # ) # row['product'] = product_model.id # (warehouse_model, _created) = Warehouse.objects.get_or_create( # reference=row.get('warehouse') # ) # row['warehouse'] = warehouse_model.id # (circuit_model, _created) = Circuit.objects.get_or_create( # reference=row.get('circuit'), # ) # row['circuit'] = circuit_model.id row['delivered_at'] = datetime.datetime.strptime( row['delivered_at'], "%m/%d/%Y").date()
class AssetResource(VersionedResource): class RackForeignKeyWidget(ForeignKeyWidget): def clean(self, value, row=None, *args, **kwargs): if row['datacenter']: my_rack = row['rack'] my_site = get_site(row) version = ChangePlan.objects.get(id=row['version']) if my_site: site = Site.objects.get(abbr=my_site) rack = newest_object(Rack, version, rack=my_rack, site=site) if not rack: raise serializers.ValidationError( "Rack does not exist.") return add_rack(rack, version) return None def render(self, value, obj=None): return '' if obj and obj.itmodel.type == ITModel.Type.BLADE else super( ).render(value, obj) class ITModelForeignKeyWidget(ForeignKeyWidget): def clean(self, value, row=None, *args, **kwargs): return self.model.objects.get( vendor__iexact=row['vendor'], model_number__iexact=row['model_number']) class VersionWidget(ForeignKeyWidget): def clean(self, value, row=None, *args, **kwargs): if value is not None: return self.get_queryset(value, row, *args, **kwargs).get(**{self.field: value}) else: return None class SiteWidget(ForeignKeyWidget): def __init__(self, column, *args, **kwargs): self.column = column super().__init__(Site, 'abbr', *args, **kwargs) def clean(self, value, row=None, *args, **kwargs): site = get_site(row) return super().clean(site, row, *args, **kwargs) def render(self, value, obj=None): if value and obj and not obj.itmodel.type == ITModel.Type.BLADE: if self.column == 'datacenter' and not value.offline: return value.abbr if self.column == 'offline_site' and value.offline: return value.abbr return "" class ChassisWidget(ForeignKeyWidget): def clean(self, value, row=None, *args, **kwargs): if value: version = ChangePlan.objects.get(id=row['version']) chassis = newest_object(Asset, version, asset_number=value) return add_asset(chassis, version) return None datacenter = fields.Field(column_name='datacenter', attribute='site', widget=SiteWidget('datacenter')) offline_site = fields.Field(column_name='offline_site', attribute='site', widget=SiteWidget('offline_site')) rack = fields.Field(column_name='rack', attribute='rack', widget=RackForeignKeyWidget(Rack, 'rack')) vendor = fields.Field(column_name='vendor', attribute='itmodel', widget=ITModelForeignKeyWidget(ITModel, 'vendor')) model_number = fields.Field(column_name='model_number', attribute='itmodel', widget=ITModelForeignKeyWidget( ITModel, 'model_number')) owner = fields.Field(column_name='owner', attribute='owner', widget=ForeignKeyWidget(User, 'username')) power_port_connection_1 = fields.Field(attribute="power_port_connection_1") power_port_connection_2 = fields.Field(attribute="power_port_connection_2") version = fields.Field(attribute='version', widget=VersionWidget(ChangePlan, 'id')) blade_chassis = fields.Field(column_name='chassis_number', attribute='blade_chassis', widget=ChassisWidget(Asset, 'asset_number')) slot = fields.Field(column_name='chassis_slot', attribute='slot', widget=IntegerWidget()) display_color = fields.Field( column_name='custom_display_color', attribute='display_color', ) cpu = fields.Field( column_name='custom_cpu', attribute='cpu', ) memory = fields.Field(column_name='custom_memory', attribute='memory', widget=IntegerWidget()) storage = fields.Field( column_name='custom_storage', attribute='storage', ) def skip_row(self, instance, original): try: check_asset_perm(self.owner.username, original.site.abbr) except: pass check_asset_perm(self.owner.username, instance.site.abbr) port1 = getattr(instance, "power_port_connection_1") port2 = getattr(instance, "power_port_connection_2") new = [port for port in (port1, port2) if len(port) > 0] curr = [ port[0] + str(port[1]) for port in instance.powered_set.values_list( "pdu__position", "plug_number") ] if hasattr(original, 'site') and instance.site.abbr != original.site.abbr: for port in original.networkport_set.all(): port.connection = None port.save() if sorted(new) != sorted(curr): return False delattr(instance, "power_port_connection_1") delattr(instance, "power_port_connection_2") return super(AssetResource, self).skip_row(instance, original) def dehydrate_power_port_connection_1(self, asset): try: if asset.itmodel.power_ports >= 1: my_powered = Powered.objects.filter(asset=asset, order=1).first() if self.version.id != 0 and my_powered is None: my_powered = Powered.objects.filter(asset=versioned_object( asset, ChangePlan.objects.get(id=0), Asset.IDENTITY_FIELDS), order=1).first() if my_powered: return str(my_powered.pdu.position) + str( my_powered.plug_number) else: return '' except: return '' def dehydrate_power_port_connection_2(self, asset): try: if asset.itmodel.power_ports >= 2: my_powered = Powered.objects.filter(asset=asset, order=2).first() if self.version.id != 0 and my_powered is None: my_powered = Powered.objects.filter(asset=versioned_object( asset, ChangePlan.objects.get(id=0), Asset.IDENTITY_FIELDS), order=2).first() if my_powered: return str(my_powered.pdu.position) + str( my_powered.plug_number) else: return '' except: return '' class Meta: model = Asset exclude = ('id', 'itmodel', 'site', 'commissioned', 'decommissioned_by', 'decommissioned_timestamp') import_id_fields = ('asset_number', 'version') export_order = ('asset_number', 'hostname', 'datacenter', 'offline_site', 'rack', 'rack_position', 'blade_chassis', 'slot', 'vendor', 'model_number', 'owner', 'comment', 'power_port_connection_1', 'power_port_connection_2', 'display_color', 'cpu', 'memory', 'storage') skip_unchanged = True report_skipped = True clean_model_instances = True def before_import_row(self, row, **kwargs): if row['datacenter']: if row['offline_site']: raise serializers.ValidationError( 'You cannot specify both datacenter and offline_site') if row['asset_number'] == '': max_an = Asset.objects.all().aggregate(Max('asset_number')) row['asset_number'] = (max_an['asset_number__max'] or 100000) + 1 else: row['asset_number'] = int(row['asset_number']) val = row['custom_display_color'] row['custom_display_color'] = val if val else None val = row['custom_cpu'] row['custom_cpu'] = val if val else None val = row['custom_storage'] row['custom_storage'] = val if val else None row['version'] = self.version.id def after_import_row(self, row, row_result, **kwargs): if row_result.import_type == 'skip': return try: my_asset = Asset.objects.get(id=row_result.object_id) except: return # skip my_asset = add_asset(my_asset, self.version) if not my_asset.site.offline and not my_asset.itmodel.type == ITModel.Type.BLADE: my_rack = my_asset.rack special = [] for i in range(1, min(3, my_asset.itmodel.power_ports + 1)): pc = row['power_port_connection_' + str(i)] if len(pc) > 0: try: split = re.search(r"\d", pc).start() position = pc[:split] plug = int(pc[split:]) special.append({ 'pdu_id': PDU.objects.get(rack=my_rack, position=position), 'plug': plug }) except AttributeError: raise ValidationError('power_port_connection_' + str(i) + " formatted incorrectly") except PDU.DoesNotExist: raise ValidationError( pc + " does not exit on the specified rack") current = [] powered_set = my_asset.powered_set if 2 <= len(special) < my_asset.itmodel.power_ports and \ powered_set.exists() and powered_set.first().pdu.rack == my_asset.rack: special_simple = [ port['pdu_id'].position + str(port['plug']) for port in special ] current = [{ 'pdu_id': port['pdu'], 'plug': port['plug_number'], 'position': port['pdu__position'] } for port in powered_set.order_by('order').values( 'pdu', 'plug_number', 'pdu__position')] for port in current: simple = port['position'] + str(port['plug']) if simple in special_simple: current.remove(port) my_asset.powered_set.all().delete() create_ports = False net_port = my_asset.networkport_set.first() if net_port and net_port.label.itmodel != my_asset.itmodel: for port in my_asset.networkport_set.all(): port.delete() create_ports = True if row_result.import_type == "new" or create_ports: ports = [{ "label": port, "mac_address": None, "connection": None } for port in NetworkPortLabel.objects.filter( itmodel=my_asset.itmodel).values_list('name', flat=True)] else: ports = None my_asset.version = self.version create_asset_extra(my_asset, self.version, special + current, ports) if my_asset.itmodel.type == ITModel.Type.BLADE: my_asset.rack = my_asset.blade_chassis.rack my_asset.save() if my_asset.site.offline: for port in my_asset.networkport_set.all(): port.connection = None port.save() def after_export(self, queryset, data, *args, **kwargs): del data['version']
class ActividadResource(resources.ModelResource): wp = fields.Field(column_name='wp', attribute='wp', widget=IntegerWidget()) id_notificacion_noc = fields.Field(column_name='id notificacion noc', attribute='id_notificacion_noc', widget=IntegerWidget()) service_supplier = fields.Field( column_name='service supplier', attribute='service_supplier', ) field_manager = fields.Field( column_name='field manager', attribute='field_manager', ) valor_wp_eur = fields.Field( column_name='valor wp eur', attribute='valor_wp_eur', ) estacion = fields.Field( column_name='estacion', attribute='estacion', widget=ForeignKeyWidget(Estacion, 'nombre'), ) regional = fields.Field( column_name='regional', attribute='estacion__regional', ) ciudad = fields.Field( column_name='ciudad', attribute='estacion__ciudad', ) responsable = fields.Field( column_name='responsable', attribute='estacion__responsable', ) prioridad = fields.Field( column_name='prioridad', attribute='estacion__prioridad', ) tipo_trabajo = fields.Field( column_name='tipo trabajo', attribute='tipo_trabajo', ) fecha_ingreso_onair = fields.Field(column_name='fecha ingreso onair', attribute='fecha_ingreso_onair', widget=DateWidget(format='%d/%m/%Y')) realtifinish = fields.Field(column_name='realtifinish', attribute='realtifinish', widget=DateWidget(format='%d/%m/%Y')) fecha_integracion = fields.Field(column_name='fecha integracion', attribute='fecha_integracion', widget=DateWidget(format='%d/%m/%Y')) grupo_gap = fields.Field( column_name='grupo gap', attribute='grupo_gap', ) fecha_estado_noc = fields.Field(column_name='fecha estado noc', attribute='fecha_estado_noc', widget=DateWidget(format='%d/%m/%Y')) estado_noc = fields.Field( column_name='estado noc', attribute='estado_noc', ) subestado_noc = fields.Field( column_name='subestado noc', attribute='subestado_noc', ) impacto_degradacion = fields.Field( column_name='impacto degradacion', attribute='impacto_degradacion', ) fecha_fc_visita = fields.Field(column_name='fecha fc visita', attribute='fecha_fc_visita', widget=DateWidget(format='%d/%m/%Y')) # asignaciones npo npo_ingeniero = fields.Field( column_name='npo ingeniero', attribute='npo_ingeniero', ) npo_estado_asignacion = fields.Field( column_name='npo estado asignacion', attribute='npo_estado_asignacion', ) npo_concepto = fields.Field( column_name='npo concepto', attribute='npo_concepto', ) npo_tipo_intervencion = fields.Field( column_name='npo tipo intervencion', attribute='npo_tipo_intervencion', ) npo_fecha_asignacion = fields.Field(column_name='npo fecha asignacion', attribute='npo_fecha_asignacion', widget=DateWidget(format='%d/%m/%Y')) npo_fm_supervisor = fields.Field( column_name='npo fm supervisor', attribute='npo_fm_supervisor', ) # asignaciones ni ni_ingeniero = fields.Field( column_name='ni ingeniero', attribute='ni_ingeniero', ) ni_estado_asignacion = fields.Field( column_name='ni estado asignacion', attribute='ni_estado_asignacion', ) ni_origen_falla = fields.Field( column_name='ni origen falla', attribute='ni_origen_falla', ) ni_solver = fields.Field( column_name='ni solver', attribute='ni_solver', ) ni_concepto = fields.Field( column_name='ni concepto', attribute='ni_concepto', ) ni_estado_solicitud_hw = fields.Field( column_name='ni estado solicitud hw', attribute='ni_estado_solicitud_hw', ) ni_tipo_intervencion = fields.Field( column_name='ni tipo intervencion', attribute='ni_tipo_intervencion', ) ni_fecha_asignacion = fields.Field(column_name='ni fecha asignacion', attribute='ni_fecha_asignacion', widget=DateWidget(format='%d/%m/%Y')) ni_fm_supervisor = fields.Field( column_name='ni fm supervisor', attribute='ni_fm_supervisor', ) clasificacion_previa = fields.Field( column_name='clasificacion previa', attribute='clasificacion_previa', ) # asignaciones npo y asignaciones ni estado_ultimo = fields.Field( column_name='estado ultimo', attribute='estado_ultimo', ) estado_unico = fields.Field( column_name='estado unico', attribute='estado_unico', ) def for_delete(self, row, instance): return self.fields['subestado'].clean(row) class Meta: model = Actividad exclude = ( 'creado', 'actualizado', ) export_order = ( # actividad 'id', 'wp', 'id_notificacion_noc', 'agrupador', 'service_supplier', 'field_manager', 'valor_wp_eur', 'estacion', 'regional', 'ciudad', 'responsable', 'prioridad', 'banda', 'proyecto', 'escenario', 'tipo_trabajo', 'fecha_ingreso_onair', 'realtifinish', 'fecha_integracion', 'grupo_gap', 'fecha_estado_noc', 'estado_noc', 'subestado_noc', 'impacto_degradacion', 'fecha_fc_visita', # asignaciones npo 'npo_ingeniero', 'npo_estado_asignacion', 'npo_concepto', 'npo_tipo_intervencion', 'npo_fecha_asignacion', 'npo_fm_supervisor', # asignaciones ni 'ni_ingeniero', 'ni_estado_asignacion', 'ni_origen_falla', 'ni_solver', 'ni_concepto', 'ni_estado_solicitud_hw', 'ni_tipo_intervencion', 'ni_fecha_asignacion', 'ni_fm_supervisor', 'clasificacion_previa', # asignaciones npo y asignaciones ni 'estado_ultimo', 'estado_unico', # actividad 'estado', 'subestado', )
class ForecastResource(resources.ModelResource): ''' Data import class ''' # product = Field( # attribute='product', # column_name='product', # widget=ForeignKeyWidget(Product, 'pk') # ) # warehouse = Field( # attribute='warehouse', # column_name='warehouse', # widget=ForeignKeyWidget(Warehouse, 'pk') # ) # customer = Field( # attribute='customer', # column_name='customer', # widget=ForeignKeyWidget(Customer, 'pk') # ) # circuit = Field( # attribute='circuit', # column_name='circuit', # widget=ForeignKeyWidget(Circuit, 'pk') # ) forecast_date = Field( attribute='forecast_date', column_name='forecast_date', widget=DateWidget(), ) version = Field( attribute='version', column_name='version', widget=ForeignKeyWidget(Version, 'pk'), ) forecasted_quantity = Field( attribute='forecasted_quantity', column_name='forecasted_quantity', # widget=IntegerCleanWidget(), widget=IntegerWidget(), ) # product_cost = Field( # column_name='product_cost', # widget=DecimalWidget(), # ) # product_type = Field( # column_name='product_type', # ) # product_name = Field( # column_name='product_name', # ) class Meta: model = Forecast # instance_loader_class = CachedInstanceLoader # fields = ('id', 'product', 'forecast_date', 'forecasted_quantity',) exclude = ( 'status', 'created_at', 'updated_at', ) use_transactions = True use_bulk = True batch_size = 1000 skip_diff = True skip_unchanged = False