Guest User

Untitled

a guest
Dec 10th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. def handle_parameters_upload(request, file):
  2. wb = openpyxl.load_workbook(file, read_only=True)
  3. first_sheet = wb.get_sheet_names()[0]
  4. ws = wb.get_sheet_by_name(first_sheet)
  5.  
  6. recipe, _ = Recipe.objects.get_or_create(par_recipe=ws["B2"].value)
  7.  
  8. line, _ = Line.objects.get_or_create(par_machine=ws["C2"].value)
  9.  
  10. order, _ = Order.objects.get_or_create(par_fa=ws["D2"].value)
  11.  
  12. # Clear existing data
  13. Measurements.objects.all().delete()
  14. Parameter.objects.all().delete()
  15.  
  16. parameter_data = set()
  17. duplicate_measurement_parameter = {}
  18. measurement_data = []
  19.  
  20. for row in ws.iter_rows(row_offset=1):
  21. parameter = (row[5].value, row[6].value, row[7].value,)
  22.  
  23. if parameter in parameter_data:
  24. duplicate_measurement_parameter[row[8].value] = {
  25. 'par_rollennr': parameter[0],
  26. 'par_definition_id': parameter[1],
  27. 'par_name': parameter[2],
  28. }
  29. # Add the parameter
  30. parameter_data.add(parameter)
  31. # par_rollennr, par_definition_id, par_name, measurement: par_value
  32. measurement_data.append(row[8].value)
  33.  
  34. # Bulk create data
  35. parameters = Parameter.objects.bulk_create([
  36. Parameter(
  37. id_parameter=index,
  38. par_rollennr=p_data[0],
  39. par_definition_id=p_data[1],
  40. par_name=p_data[2],
  41. ) for index, p_data in enumerate(parameter_data)
  42. ])
  43. Measurements.objects.bulk_create([
  44. Measurements(
  45. line=line,
  46. order=order,
  47. recipe=recipe,
  48. par_value=m_data,
  49. parameter=parameter or Parameter.objects.filter(**duplicate_measurement_parameter.get(m_data, {})).first(),
  50. )
  51. for parameter, m_data in zip_longest(parameters, measurement_data)
  52. ])
  53. return True
  54.  
  55. class Parameter (models.Model):
  56. id_parameter = models.IntegerField(primary_key=True)
  57. par_rollennr = models.IntegerField(default=0)
  58. par_definition_id = models.IntegerField(default=0)
  59. par_name = models.CharField(max_length=200)
  60.  
  61.  
  62. class Measurements (models.Model):
  63. id_measurement = models.AutoField(primary_key=True)
  64. par_value = models.IntegerField(default=0)
  65. line = models.ForeignKey(Line, on_delete=models.CASCADE, null=True)
  66. order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True)
  67. recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, null=True)
  68. parameter = models.ForeignKey(Parameter, on_delete=models.CASCADE, null=True)
Add Comment
Please, Sign In to add comment