Advertisement
Guest User

Untitled

a guest
Apr 16th, 2014
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 137.91 KB | None | 0 0
  1. public class RepairEditor extends AbstractEditor<RepairProxy, RepairEditor, RepairRequestFactory> {
  2.  
  3.  
  4.     public interface RepairDriver extends RequestFactoryEditorDriver<RepairProxy, RepairEditor> {}
  5.  
  6.     protected BoxLayoutContainer.BoxLayoutData repairLineFieldData = new BoxLayoutContainer.BoxLayoutData(new Margins(5, 10, 5, 10));
  7.     protected BoxLayoutContainer.BoxLayoutData repairLineLabelData = new BoxLayoutContainer.BoxLayoutData(new Margins(5, 30, 5, 10));
  8.     protected VerticalLayoutContainer.VerticalLayoutData repairVerticalData = new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5));
  9.  
  10.     TabPanel repairTabPanel;
  11.     /*InfoTabPanel block begin*/
  12.     VerticalLayoutContainer defectsTabPanel;
  13.  
  14.     VerticalLayoutContainer infoTabPanel;
  15.     VerticalLayoutContainer documentsLayoutContainer;
  16.  
  17.     HBoxLayoutContainer vu53Container;
  18.     HBoxLayoutContainer listCompletionContainer;
  19.  
  20.  
  21.     CarProperties carProps = GWT.create(CarProperties.class);
  22.     TransportRateProperties cargoEtsngProps = GWT.create(TransportRateProperties.class);
  23.     RepairTypeProperties repairTypeProps = GWT.create(RepairTypeProperties.class);
  24.     RailwayProperties railwayProps = GWT.create(RailwayProperties.class);
  25.     DepotProperties depotProps = GWT.create(DepotProperties.class);
  26.     RepairDocumentProperties repairDocumentProps = GWT.create(RepairDocumentProperties.class);
  27.     CompletionRecordProperties completionRecordProperties = GWT.create(CompletionRecordProperties.class);
  28.     PaymentProperties paymentProperties = GWT.create(PaymentProperties.class);
  29.  
  30.     UploadComponent uploadComponent;
  31.     ListStore<CarProxy> carStore = new ListStore<>(carProps.key());
  32.     ListStore<TransportRateProxy> cargoEtsngStore = new ListStore<>(cargoEtsngProps.key());
  33.     ListStore<RepairTypeProxy> repairTypeStore = new ListStore<>(repairTypeProps.key());
  34.     ListStore<RailwayProxy> railwayStore = new ListStore<>(railwayProps.key());
  35.     ListStore<DepotProxy> depotStore = new ListStore<>(depotProps.key());
  36.     ModelKeyProvider completionKeyProvider = new ModelKeyProvider<CompletionRecordProxy>() {
  37.         @Override
  38.         public String getKey(CompletionRecordProxy item) {
  39.             return getCompletionRecordProxyKey(item.getTitle(), item.getNumber(), item.getDocument());
  40.         }
  41.     };
  42.     ListStore<CompletionRecordProxy> completionRecordProxyListStore = new ListStore<CompletionRecordProxy>(completionKeyProvider);
  43.  
  44.     Map<Long, RepairDocTypePanel> repairDocTypePanels = new HashMap<>();
  45.  
  46.     ListStore<Boolean> carLoadedStore = new ListStore<Boolean>(new ModelKeyProvider<Boolean>() {
  47.         @Override
  48.         public String getKey(Boolean item) {
  49.             return item == null || !item ? Boolean.FALSE.toString() : Boolean.TRUE.toString();
  50.         }
  51.     });
  52.  
  53.     RepairDefectPartsFieldSet partsFieldSet;
  54.  
  55.     @Path("loadDate")
  56.     DateField loadDate = new DateField(dateTimeProperty);
  57.     @Path("car")
  58.     ComboBox<CarProxy> cars = new ComboBox<>(carStore, carProps.label());
  59.     @Path("loaded")
  60.     ComboBox<Boolean> carLoaded = new ComboBox<>(carLoadedStore,  new LabelProvider<Boolean>() {
  61.         @Override
  62.         public String getLabel(Boolean item) {
  63.             return item == null || !item ? "Порожний" : "Груженый";
  64.         }
  65.     });
  66.  
  67.     @Path("mileage")
  68.     FloatField mileage  = new FloatField();
  69.  
  70.     @Path("cargoEtsng")
  71.     ComboBox<TransportRateProxy> cargoEtsng = new ComboBox<>(cargoEtsngStore, cargoEtsngProps.label());
  72.     @Path("repairType")
  73.     ComboBox<RepairTypeProxy> repairTypes = new ComboBox<>(repairTypeStore, repairTypeProps.label());
  74.  
  75.     @Path("repairStation")
  76.     ComboBox<RailwayProxy> repairStation = new ComboBox<>(new ListStore<RailwayProxy>(railwayProps.key()), railwayProps.label());
  77.     @Path("uncoupleStation")
  78.     ComboBox<RailwayProxy> uncoupleStation = new ComboBox<>(new ListStore<RailwayProxy>(railwayProps.key()), railwayProps.label());
  79.     @Path("currentStation")
  80.     ComboBox<RailwayProxy> currentStation = new ComboBox<>(new ListStore<RailwayProxy>(railwayProps.key()), railwayProps.label());
  81.     @Path("depot")
  82.     ComboBox<DepotProxy> depot = new ComboBox<>(depotStore, depotProps.label());
  83.  
  84.     @Path("defect1")
  85.     TextField defect1 = new TextField();
  86.     @Path("defect2")
  87.     TextField defect2 = new TextField();
  88.     @Path("defectType1")
  89.     SimpleComboBox<String> defectType1 = new SimpleComboBox<>(new StringLabelProvider<String>());
  90.     @Path("defectType2")
  91.     SimpleComboBox<String> defectType2 = new SimpleComboBox<>(new StringLabelProvider<String>());
  92.     @Path("defectType3")
  93.     SimpleComboBox<String> defectType3 = new SimpleComboBox<>(new StringLabelProvider<String>());
  94.  
  95.     @Path("vu23Date")
  96.     DateField vu23Date = new DateField(dateTimeProperty);
  97.     @Path("startDate")
  98.     DateField startDate = new DateField(dateTimeProperty);
  99.     @Path("endDate")
  100.     DateField endDate = new DateField(dateTimeProperty);
  101.  
  102.  
  103.     @Path("vu23Vu36Days")
  104.     FloatField vu23Vu36Days  = new FloatField();
  105.     @Path("repairDays")
  106.     FloatField repairDays  = new FloatField();
  107.     @Path("downtimeOnStation")
  108.     FloatField downtimeOnStation  = new FloatField();
  109.  
  110.     @Path("provisionalInvoiceNumber")
  111.     TextField provisionalInvoiceNumber =  new TextField();
  112.     @Path("provisionalInvoiceDate")
  113.     DateField provisionalInvoiceDate= new DateField(dateTimeProperty);
  114.     @Path("provisionalInvoiceAmount")
  115.     FloatField provisionalInvoiceAmount = new FloatField();
  116.     @Path("defectsAbout")
  117.     TextArea defectsAbout = new TextArea();
  118.  
  119.  
  120.  
  121.     @Path("repairDocuments")
  122.     ListStoreEditor<RepairDocumentProxy> repairDocuments;
  123.  
  124.     @Path("attachments")
  125.     ListStoreEditor<AttachmentProxy> attachments;
  126.  
  127.     @Path("completionList")
  128.     ListStoreEditor<CompletionRecordProxy> completionList;
  129.  
  130.     @Path("repairDefects")
  131.     ListStoreEditor<RepairDefectProxy> repairDefects;
  132.  
  133.     @Path("payments")
  134.     ListStoreEditor<PaymentProxy> payments;
  135.  
  136.     @Ignore
  137.     TextLabel carFactory = new TextLabel();
  138.     @Ignore
  139.     TextLabel claimCarFactory = new TextLabel();
  140.  
  141.     @Ignore
  142.     TextLabel carType = new TextLabel();
  143.     @Ignore
  144.     TextLabel carOwner = new TextLabel();
  145.     @Ignore
  146.     TextLabel carBuildingDate = new TextLabel();
  147.  
  148.     //@Ignore
  149.     //TextLabel carNextRepairDate = new TextLabel();
  150.     @Path("plannedRepairDate")
  151.     DateField carNextRepairDate= new LocalDateField();
  152.  
  153.     @Ignore
  154.     TextLabel railRoad = new TextLabel();
  155.  
  156.     @Ignore
  157.     TextLabel repairDebit = new TextLabel();
  158.     @Ignore
  159.     TextLabel repairCredit = new TextLabel();
  160.  
  161.     @Ignore
  162.     TextLabel repairPaymentDebit = new TextLabel();
  163.     @Ignore
  164.     TextLabel repairPaymentCredit = new TextLabel();
  165.  
  166.  
  167.     @Ignore
  168.     TextLabel defectsRepairSum = new TextLabel();
  169.     @Ignore
  170.     TextLabel defectsWorkSum = new TextLabel();
  171.     @Ignore
  172.     TextLabel defectsTotalSumWithoutTaxes = new TextLabel();
  173.     @Ignore
  174.     TextLabel defectsTotalSumTaxes = new TextLabel();
  175.     @Ignore
  176.     TextLabel defectsTotalSumWithTaxes = new TextLabel();
  177.     @Ignore
  178.     TextLabel defectsTotalSaveSum = new TextLabel();
  179.  
  180.     @Ignore
  181.     ListStoreEditor<CompletionRecordProxy> completionRecordVu53FirstStoreEditor;
  182.     @Ignore
  183.     ListStoreEditor<CompletionRecordProxy> completionRecordVu53LastStoreEditor;
  184.     @Ignore
  185.     ListStoreEditor<CompletionRecordProxy> completionRecordListCompletionAutoStoreEditor;
  186.     @Ignore
  187.     ListStoreEditor<CompletionRecordProxy> completionRecordListCompletion2FieldsStoreEditor;
  188.     @Ignore
  189.     ListStoreEditor<CompletionRecordProxy> completionRecordListCompletion4FieldsMainStoreEditor;
  190.     @Ignore
  191.     ListStoreEditor<CompletionRecordProxy> completionRecordListCompletion4FieldsLeftStoreEditor;
  192.     @Ignore
  193.     ListStoreEditor<CompletionRecordProxy> completionRecordListCompletion4FieldsRightStoreEditor;
  194.  
  195.     @Ignore
  196.     ListStoreEditor<CompletionRecordProxy> completionRecordPartWheelsStoreEditor;
  197.     @Ignore
  198.     ListStoreEditor<CompletionRecordProxy> completionRecordPartFrameStoreEditor;
  199.     @Ignore
  200.     ListStoreEditor<CompletionRecordProxy> completionRecordPartBeamStoreEditor;
  201.  
  202.     HBoxLayoutContainer mxLabelContainer = new HBoxLayoutContainer();
  203.     /*InfoTabPanel block end*/
  204.  
  205.  
  206.     private List<Grid> gridsForRefresh = new ArrayList<>();
  207.     private List<CheckBox> yokeCheckBoxesForRefresh = new ArrayList<>();
  208.     private List<CheckBox> brakeEquipmentCheckBoxesForRefresh = new ArrayList<>();
  209.     private List<VerticalLayoutContainer> planRepairTabs = new ArrayList<>();
  210.     private List<VerticalLayoutContainer> currentRepairTabs = new ArrayList<>();
  211.  
  212.  
  213.     ListStore<PaymentProxy> freePayments =  new ListStore<PaymentProxy>(paymentProperties.key());
  214.  
  215.  
  216.     @Ignore
  217.     final TextField paymentNumber = new TextField();
  218.     @Ignore
  219.     final DateField paymentLoadDate = new DateField(dateTimeProperty);
  220.     @Ignore
  221.     final NumberField<Float> paymentAmount = new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor());
  222.     @Ignore
  223.     final TextArea paymentDetails = new TextArea();
  224.     @Ignore
  225.     final TextButton paymentButton = new TextButton("Прикрепить");
  226.     @Ignore
  227.     final TextField invoiceNumber = new TextField();
  228.     @Ignore
  229.     final DateField invoiceLoadDate = new DateField(dateTimeProperty);
  230.     @Ignore
  231.     final NumberField<Float> invoiceAmount = new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor());
  232.     @Ignore
  233.     final TextLabel vu25TextField = new TextLabel();
  234.     @Ignore
  235.     final TextLabel vu41TextField = new TextLabel();
  236.     @Ignore
  237.     final TextField lesserTextField = new TextField();
  238.     private RepairClaimProxy repairClaimProxy = null;
  239.  
  240.     private Grid<PaymentProxy> paymentGrid;
  241.  
  242.     Map<ListStore<CompletionRecordProxy>, List<CompletionChecker>> completionCheckerList = new HashMap<>();
  243.     public RepairEditor() {
  244.         initEditor();
  245.  
  246.     }
  247.  
  248.     @Override
  249.     protected void initRequestFactory() {
  250.         service = GWT.create(RepairRequestFactory.class);
  251.         driver = GWT.create(RepairDriver.class);
  252.         service.initialize(new SimpleEventBus(), transport);
  253.         driver.initialize(service, this);
  254.     }
  255.  
  256.     @Override
  257.     protected void initUI() {
  258.         fieldsPanel.setHeight(675);
  259.         fieldsPanel.setWidth(1000);
  260.  
  261.  
  262.         repairTabPanel = new TabPanel();
  263.         infoTabPanel = new VerticalLayoutContainer();
  264.         fillInfoTabPanel(infoTabPanel);
  265.         infoTabPanel.setTitle("Основная информация");
  266.         repairTabPanel.add(infoTabPanel, infoTabPanel.getTitle());
  267.  
  268.         VerticalLayoutContainer paymentTabPanel = new VerticalLayoutContainer();
  269.         fillPaymentsTabPanel(paymentTabPanel);
  270.         paymentTabPanel.setTitle("Платежное поручение");
  271.         planRepairTabs.add(paymentTabPanel);
  272.         currentRepairTabs.add(paymentTabPanel);
  273.  
  274.  
  275.         VerticalLayoutContainer documentsTabPanel = new VerticalLayoutContainer();
  276.         fillDocumentsTabPanel(documentsTabPanel);
  277.         documentsTabPanel.setTitle("Документы");
  278.         planRepairTabs.add(documentsTabPanel);
  279.         currentRepairTabs.add(documentsTabPanel);
  280.  
  281.         defectsTabPanel = new VerticalLayoutContainer();
  282.         fillDefectsTabPanel(defectsTabPanel);
  283.         defectsTabPanel.setTitle("Неисправности");
  284.         planRepairTabs.add(defectsTabPanel);
  285.         currentRepairTabs.add(defectsTabPanel);
  286.  
  287.         VerticalLayoutContainer completionTabPanel = new VerticalLayoutContainer();
  288.         fillCompletionTabPanel(completionTabPanel);
  289.         completionTabPanel.setTitle("Информация о комплектации");
  290.         planRepairTabs.add(completionTabPanel);
  291.  
  292.  
  293.  
  294.         VerticalLayoutContainer claimsTabPanel = new VerticalLayoutContainer();
  295.         fillClaimTabPanel(claimsTabPanel);
  296.         claimsTabPanel.setTitle("Претензии");
  297.         currentRepairTabs.add(claimsTabPanel);
  298.  
  299.  
  300.  
  301.  
  302.  
  303.         addWidget(repairTabPanel);
  304.     }
  305.  
  306.     protected void fillCompletionTabPanel(InsertResizeContainer container){
  307.         completionRecordPartWheelsStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  308.         completionRecordPartBeamStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  309.         completionRecordPartFrameStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  310.  
  311.         FieldSet wheelFieldSet = new FieldSet();
  312.         wheelFieldSet.setHeadingText("Колёсные пары");
  313.         wheelFieldSet.setCollapsible(false);
  314.         wheelFieldSet.setLayoutData(repairVerticalData);
  315.         container.add(wheelFieldSet);
  316.  
  317.         ColumnConfig<CompletionRecordProxy, ?> ccTitle = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  318.             @Override
  319.             public String getValue(CompletionRecordProxy object) {
  320.                 String title = object.getTitle();
  321.                 if (!"Другое".equals(title)) title += " " + object.getNumber();
  322.                 return title;
  323.             }
  324.  
  325.             @Override
  326.             public void setValue(CompletionRecordProxy object, String value) {}
  327.  
  328.             @Override
  329.             public String getPath() {return null;}
  330.         }, 140, "Наименование");
  331.  
  332.         ColumnConfig<CompletionRecordProxy, Float> ccLeftFlange = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.flangeWidthLeft(), 120, "Толщина гребня");
  333.         ccLeftFlange.setHeader(getMultiLineHeader("Толщина гребня","Левая КП"));
  334.         ColumnConfig<CompletionRecordProxy, Float> ccRightFlange = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.flangeWidthRight(), 120, "Толщина гребня");
  335.         ccRightFlange.setHeader(getMultiLineHeader("Толщина гребня","Правая КП"));
  336.         ColumnConfig<CompletionRecordProxy, Float> ccLeftRim = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.rimWidthLeft(), 120, "Толщина обода");
  337.         ccLeftRim.setHeader(getMultiLineHeader("Толщина обода","Левая КП"));
  338.         ColumnConfig<CompletionRecordProxy, Float> ccRightRim = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.rimWidthRight(), 120, "Толщина обода");
  339.         ccRightRim.setHeader(getMultiLineHeader("Толщина обода","Правая КП"));
  340.         ColumnConfig<CompletionRecordProxy, Long> ccNumber = new ColumnConfig<CompletionRecordProxy, Long>(completionRecordProperties.numberNew(), 120, "Номер");
  341.         ColumnConfig<CompletionRecordProxy, Integer> ccCode = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.codeNew(), 120, "Код изготовителя");
  342.         ColumnConfig<CompletionRecordProxy, Integer> ccYear = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.yearNew(), 120, "Год изготовления");
  343.  
  344.         final List<ColumnConfig<CompletionRecordProxy, ?>> listWheelCC = new ArrayList<>();
  345.  
  346.         listWheelCC.add(ccTitle);
  347.         listWheelCC.add(ccRightRim);
  348.         listWheelCC.add(ccLeftRim);
  349.         listWheelCC.add(ccRightFlange);
  350.         listWheelCC.add(ccLeftFlange);
  351.         listWheelCC.add(ccNumber);
  352.         listWheelCC.add(ccCode);
  353.         listWheelCC.add(ccYear);
  354.  
  355.  
  356.         Grid gridWheel = new Grid<CompletionRecordProxy>(completionRecordPartWheelsStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(listWheelCC));
  357.         completionRecordPartWheelsStoreEditor.getStore().setAutoCommit(true);
  358.         GroupingView<CompletionRecordProxy> listWheelView = new GroupingView<CompletionRecordProxy>();
  359.         listWheelView.setAutoFill(false);
  360.         listWheelView.setColumnLines(true);
  361.         listWheelView.setSortingEnabled(false);
  362.         listWheelView.setEnableGroupingMenu(false);
  363.         listWheelView.setEnableNoGroups(false);
  364.         listWheelView.setShowGroupedColumn(false);
  365.         listWheelView.setForceFit(false);
  366.         gridWheel.setView(listWheelView);
  367.  
  368.         final GridInlineEditing<CompletionRecordProxy> listWheelFieldsEditing = new GridInlineEditing<CompletionRecordProxy>(gridWheel);
  369.         List<CompletionChecker> wheelCheckers = new ArrayList<CompletionChecker>();
  370.         listWheelFieldsEditing.addEditor(ccRightRim, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  371.         wheelCheckers.add(new CompletionRimRightChecker());
  372.         listWheelFieldsEditing.addEditor(ccLeftRim, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  373.         wheelCheckers.add(new CompletionRimLeftChecker());
  374.         listWheelFieldsEditing.addEditor(ccRightFlange, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  375.         wheelCheckers.add(new CompletionFlangeRightChecker());
  376.         listWheelFieldsEditing.addEditor(ccLeftFlange, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  377.         wheelCheckers.add(new CompletionFlangeLeftChecker());
  378.         listWheelFieldsEditing.addEditor(ccNumber, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  379.         wheelCheckers.add(new CompletionNumberNewChecker());
  380.         listWheelFieldsEditing.addEditor(ccCode, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  381.         wheelCheckers.add(new CompletionCodeNewChecker());
  382.         listWheelFieldsEditing.addEditor(ccYear, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  383.         wheelCheckers.add(new CompletionYearNewChecker());
  384.         completionCheckerList.put(completionRecordPartWheelsStoreEditor.getStore(), wheelCheckers);
  385.         listWheelFieldsEditing.setRevertInvalid(true);
  386.         listWheelFieldsEditing.addStartEditHandler(new StartEditEvent.StartEditHandler<CompletionRecordProxy>() {
  387.             @Override
  388.             public void onStartEdit(StartEditEvent<CompletionRecordProxy> completionRecordProxyStartEditEvent) {
  389.                 for (ColumnConfig cc : completionRecordProxyStartEditEvent.getSource().getEditableGrid().getColumnModel().getColumns()) {
  390.                     Field field = completionRecordProxyStartEditEvent.getSource().getEditor(cc);
  391.                     if (field != null && field instanceof NumberField ) {
  392.                         if (!((NumberField)field).isCurrentValid()) ((NumberField)field).setText("");
  393.                     }
  394.                 }
  395.             }
  396.         });
  397.         listWheelFieldsEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  398.             @Override
  399.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  400.                 CompletionRecordProxy cpr = completionRecordPartWheelsStoreEditor.getStore().get(event.getEditCell().getRow());
  401.                 if (!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  402.                 refreshGrids();
  403.             }
  404.         });
  405.         wheelFieldSet.add(gridWheel);
  406.  
  407.  
  408.         FieldSet frameFieldSet = new FieldSet();
  409.         frameFieldSet.setHeadingText("Боковые рамы");
  410.         frameFieldSet.setCollapsible(false);
  411.         frameFieldSet.setLayoutData(repairVerticalData);
  412.         container.add(frameFieldSet);
  413.  
  414.         List<ColumnConfig<CompletionRecordProxy, ?>> listFrameCC = new ArrayList<>();
  415.         listFrameCC.add(ccTitle);
  416.         listFrameCC.add(ccNumber);
  417.         listFrameCC.add(ccCode);
  418.         listFrameCC.add(ccYear);
  419.  
  420.  
  421.         Grid gridFrame = new Grid<CompletionRecordProxy>(completionRecordPartFrameStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(listFrameCC));
  422.         completionRecordPartFrameStoreEditor.getStore().setAutoCommit(true);
  423.         GroupingView<CompletionRecordProxy> listFrameView = new GroupingView<CompletionRecordProxy>();
  424.         listFrameView.setAutoFill(false);
  425.         listFrameView.setColumnLines(true);
  426.         listFrameView.setSortingEnabled(false);
  427.         listFrameView.setEnableGroupingMenu(false);
  428.         listFrameView.setEnableNoGroups(false);
  429.         listFrameView.setShowGroupedColumn(false);
  430.         listFrameView.setForceFit(false);
  431.         gridFrame.setView(listFrameView);
  432.         final GridInlineEditing<CompletionRecordProxy> listFrameFieldsEditing = new GridInlineEditing<CompletionRecordProxy>(gridFrame);
  433.         List<CompletionChecker> frameCheckers = new ArrayList<CompletionChecker>();
  434.         listFrameFieldsEditing.addEditor(ccNumber, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  435.         frameCheckers.add(new CompletionNumberNewChecker());
  436.         listFrameFieldsEditing.addEditor(ccCode, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  437.         frameCheckers.add(new CompletionCodeNewChecker());
  438.         listFrameFieldsEditing.addEditor(ccYear, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  439.         frameCheckers.add(new CompletionYearNewChecker());
  440.         completionCheckerList.put(completionRecordPartFrameStoreEditor.getStore(), frameCheckers);
  441.         listFrameFieldsEditing.setRevertInvalid(true);
  442.         listFrameFieldsEditing.addStartEditHandler(new StartEditEvent.StartEditHandler<CompletionRecordProxy>() {
  443.             @Override
  444.             public void onStartEdit(StartEditEvent<CompletionRecordProxy> completionRecordProxyStartEditEvent) {
  445.                 for (ColumnConfig cc : completionRecordProxyStartEditEvent.getSource().getEditableGrid().getColumnModel().getColumns()) {
  446.                     Field field = completionRecordProxyStartEditEvent.getSource().getEditor(cc);
  447.                     if (field != null && field instanceof NumberField ) {
  448.                         if (!((NumberField)field).isCurrentValid()) ((NumberField)field).setText("");
  449.                     }
  450.                 }
  451.             }
  452.         });
  453.         listFrameFieldsEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  454.             @Override
  455.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  456.                 CompletionRecordProxy cpr = completionRecordPartFrameStoreEditor.getStore().get(event.getEditCell().getRow());
  457.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  458.                 refreshGrids();
  459.                 //listFrameFieldsEditing.clearEditors();
  460.             }
  461.         });
  462.         frameFieldSet.add(gridFrame);
  463.  
  464.  
  465.         FieldSet beamFieldSet = new FieldSet();
  466.         beamFieldSet.setHeadingText("Надрессорные балки");
  467.         beamFieldSet.setCollapsible(false);
  468.         beamFieldSet.setLayoutData(repairVerticalData);
  469.         container.add(beamFieldSet);
  470.  
  471.  
  472.         List<ColumnConfig<CompletionRecordProxy, ?>> listBeamCC = new ArrayList<>();
  473.         listBeamCC.add(ccTitle);
  474.         listBeamCC.add(ccNumber);
  475.         listBeamCC.add(ccCode);
  476.         listBeamCC.add(ccYear);
  477.  
  478.  
  479.         Grid gridBeam = new Grid<CompletionRecordProxy>(completionRecordPartBeamStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(listBeamCC));
  480.         completionRecordPartFrameStoreEditor.getStore().setAutoCommit(true);
  481.         GroupingView<CompletionRecordProxy> listBeamView = new GroupingView<CompletionRecordProxy>();
  482.         listBeamView.setAutoFill(false);
  483.         listBeamView.setColumnLines(true);
  484.         listBeamView.setSortingEnabled(false);
  485.         listBeamView.setEnableGroupingMenu(false);
  486.         listBeamView.setEnableNoGroups(false);
  487.         listBeamView.setShowGroupedColumn(false);
  488.         listBeamView.setForceFit(false);
  489.         gridBeam.setView(listBeamView);
  490.         final GridInlineEditing<CompletionRecordProxy> listBeamFieldsEditing = new GridInlineEditing<CompletionRecordProxy>(gridBeam);
  491.         List<CompletionChecker> beamCheckers = new ArrayList<CompletionChecker>();
  492.         listBeamFieldsEditing.addEditor(ccNumber, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  493.         beamCheckers.add(new CompletionNumberNewChecker());
  494.         listBeamFieldsEditing.addEditor(ccCode, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  495.         beamCheckers.add(new CompletionCodeNewChecker());
  496.         listBeamFieldsEditing.addEditor(ccYear, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  497.         beamCheckers.add(new CompletionYearNewChecker());
  498.         completionCheckerList.put(completionRecordPartBeamStoreEditor.getStore(), beamCheckers);
  499.         listBeamFieldsEditing.setRevertInvalid(true);
  500.         listBeamFieldsEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  501.             @Override
  502.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  503.                 CompletionRecordProxy cpr = completionRecordPartBeamStoreEditor.getStore().get(event.getEditCell().getRow());
  504.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  505.                 refreshGrids();
  506.                 //listBeamFieldsEditing.clearEditors();
  507.             }
  508.         });
  509.         listBeamFieldsEditing.addStartEditHandler(new StartEditEvent.StartEditHandler<CompletionRecordProxy>() {
  510.             @Override
  511.             public void onStartEdit(StartEditEvent<CompletionRecordProxy> completionRecordProxyStartEditEvent) {
  512.                 for (ColumnConfig cc : completionRecordProxyStartEditEvent.getSource().getEditableGrid().getColumnModel().getColumns()) {
  513.                     Field field = completionRecordProxyStartEditEvent.getSource().getEditor(cc);
  514.                     if (field != null && field instanceof NumberField ) {
  515.                         if (!((NumberField)field).isCurrentValid()) ((NumberField)field).setText("");
  516.                     }
  517.                 }
  518.             }
  519.         });
  520.         beamFieldSet.add(gridBeam);
  521.  
  522.  
  523.     }
  524.  
  525.     protected void fillClaimTabPanel(InsertResizeContainer container){
  526.  
  527.         FieldSet claimFieldSet = new FieldSet();
  528.         claimFieldSet.setHeadingText("Информация о претензии");
  529.         claimFieldSet.setCollapsible(true);
  530.         claimFieldSet.setLayoutData(repairVerticalData);
  531.         VerticalLayoutContainer claimContainer = new VerticalLayoutContainer();
  532.         claimFieldSet.add(claimContainer);
  533.  
  534.         HBoxLayoutContainer horizontalLayoutContainerContractFirstLine =  new HBoxLayoutContainer();
  535.         claimContainer.add(horizontalLayoutContainerContractFirstLine);
  536.  
  537.         horizontalLayoutContainerContractFirstLine.add(createFieldLabel(vu41TextField, "Перевыставление счета при наличии ВУ-41", repairLineFieldData), repairLineFieldData);
  538.         horizontalLayoutContainerContractFirstLine.add(createFieldLabel(vu25TextField, "Перевыставление счета при наличии ВУ-25", repairLineFieldData), repairLineFieldData);
  539.  
  540.         HBoxLayoutContainer horizontalLayoutContainerContractSecondLine =  new HBoxLayoutContainer();
  541.         claimContainer.add(horizontalLayoutContainerContractSecondLine);
  542.  
  543.  
  544.         horizontalLayoutContainerContractSecondLine.add(createFieldLabel(claimCarFactory, "Завод-изготовитель", repairLineFieldData), repairLineFieldData);
  545.         horizontalLayoutContainerContractSecondLine.add(createFieldLabel(lesserTextField, "Арендодатель", repairLineFieldData), repairLineFieldData);
  546.     }
  547.  
  548.  
  549.     protected void fillInfoTabPanel(InsertResizeContainer container){
  550.         loadDate.setReadOnly(true);
  551.         HBoxLayoutContainer horizontalLayoutContainerHeader =  new HBoxLayoutContainer();
  552.         horizontalLayoutContainerHeader.setPadding(new Padding(5));
  553.         horizontalLayoutContainerHeader.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCHMAX);
  554.         container.add(horizontalLayoutContainerHeader);
  555.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(loadDate, "Дата внесения в реестр", repairLineFieldData), repairLineLabelData);
  556.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(repairDebit, "Дебет", repairLineFieldData), repairLineLabelData);
  557.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(repairCredit, "Кредит", repairLineFieldData), repairLineLabelData);
  558.  
  559.         VerticalLayoutContainer verticalLayoutContainer =  new VerticalLayoutContainer();
  560.  
  561.         container.add(verticalLayoutContainer);
  562.         FieldSet carFieldSet = new FieldSet();
  563.         carFieldSet.setHeadingText("Информация о вагоне");
  564.         carFieldSet.setCollapsible(true);
  565.         carFieldSet.setLayoutData(repairVerticalData);
  566.         verticalLayoutContainer.add(carFieldSet);
  567.  
  568.         VerticalLayoutContainer contractContainer = new VerticalLayoutContainer();
  569.         carFieldSet.add(contractContainer);
  570.  
  571.         HBoxLayoutContainer horizontalLayoutContainerContractFirstLine =  new HBoxLayoutContainer();
  572.         contractContainer.add(horizontalLayoutContainerContractFirstLine);
  573.         HBoxLayoutContainer horizontalLayoutContainerContractSecondLine =  new HBoxLayoutContainer();
  574.         contractContainer.add(horizontalLayoutContainerContractSecondLine);
  575.  
  576.         cars.setAllowBlank(false);
  577.         cars.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  578.         cars.setMinListWidth(250);
  579.         carStore.addSortInfo(new Store.StoreSortInfo<CarProxy>(carProps.number(), SortDir.ASC));
  580.         cars.addSelectionHandler(new SelectionHandler<CarProxy>() {
  581.             @Override
  582.             public void onSelection(SelectionEvent<CarProxy> event) {
  583.                 fillCarFields(event.getSelectedItem());
  584.             }
  585.         });
  586.  
  587.         carLoaded.setAllowBlank(false);
  588.         carLoaded.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  589.         carLoaded.addSelectionHandler(new SelectionHandler<Boolean>() {
  590.             @Override
  591.             public void onSelection(SelectionEvent<Boolean> event) {
  592.                 enableCargoField(event.getSelectedItem());
  593.             }
  594.         });
  595.  
  596.         cargoEtsng.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  597.         cargoEtsngStore.addSortInfo(new Store.StoreSortInfo<TransportRateProxy>(cargoEtsngProps.title(), SortDir.ASC));
  598.         cargoEtsng.setMinListWidth(250);
  599.  
  600.         repairTypes.setAllowBlank(false);
  601.         repairTypes.setForceSelection(true);
  602.         repairTypes.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  603.         repairTypeStore.addSortInfo(new Store.StoreSortInfo<RepairTypeProxy>(repairTypeProps.title(), SortDir.ASC));
  604.         repairTypes.setWidth(350);
  605.         repairTypes.addSelectionHandler(new SelectionHandler<RepairTypeProxy>() {
  606.             @Override
  607.             public void onSelection(SelectionEvent<RepairTypeProxy> event) {
  608.                 hideNotUsingDocuments(event.getSelectedItem().getPlanned());
  609.                 updateRepairTabsHeaders(event.getSelectedItem().getPlanned());
  610.                 changeRepairTabs(event.getSelectedItem().getPlanned());
  611.                 partsFieldSet.setRepairType(event.getSelectedItem().getPlanned());
  612.             }
  613.         });
  614.  
  615.         defect1.setWidth(350);
  616.         defect2.setWidth(350);
  617.  
  618.         defectType1.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  619.         defectType2.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  620.         defectType3.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  621.  
  622.         carStore.addSortInfo(new Store.StoreSortInfo<CarProxy>(carProps.number(), SortDir.ASC));
  623.  
  624.         railwayStore.addSortInfo(new Store.StoreSortInfo<RailwayProxy>(railwayProps.title(), SortDir.ASC));
  625.         repairStation.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  626.         uncoupleStation.setAllowBlank(false);
  627.         uncoupleStation.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  628.         currentStation.setAllowBlank(false);
  629.         currentStation.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  630.         currentStation.addSelectionHandler(new SelectionHandler<RailwayProxy>() {
  631.             @Override
  632.             public void onSelection(SelectionEvent<RailwayProxy> event) {
  633.                 fillCurrentStationFields(event.getSelectedItem());
  634.             }
  635.         });
  636.  
  637.         depotStore.addSortInfo(new Store.StoreSortInfo<DepotProxy>(depotProps.title(), SortDir.ASC));
  638.         depot.setAllowBlank(false);
  639.         depot.setTriggerAction(ComboBoxCell.TriggerAction.ALL);
  640.  
  641.         horizontalLayoutContainerContractFirstLine.add(createTopFieldLabel(cars, "Номер вагона", repairLineFieldData), repairLineLabelData);
  642.  
  643.         horizontalLayoutContainerContractFirstLine.add(createTopFieldLabel(carFactory, "Завод-изготовитель", repairLineFieldData), repairLineLabelData);
  644.         horizontalLayoutContainerContractFirstLine.add(createTopFieldLabel(carType, "Род вагона", repairLineFieldData), repairLineLabelData);
  645.         horizontalLayoutContainerContractFirstLine.add(createTopFieldLabel(carOwner, "Собственник", repairLineFieldData), repairLineLabelData);
  646.         horizontalLayoutContainerContractFirstLine.add(createTopFieldLabel(carBuildingDate, "Дата постройки", repairLineFieldData), repairLineLabelData);
  647.  
  648.  
  649.         horizontalLayoutContainerContractSecondLine.add(createTopFieldLabel(carLoaded, "Загруженность", repairLineFieldData), repairLineLabelData);
  650.         horizontalLayoutContainerContractSecondLine.add(createTopFieldLabel(mileage, "Остат. пробег", repairLineFieldData), repairLineLabelData);
  651.         horizontalLayoutContainerContractSecondLine.add(createTopFieldLabel(cargoEtsng, "Груз ЕТСНГ", repairLineFieldData), repairLineLabelData);
  652.  
  653.         FieldSet fileFieldSet = new FieldSet();
  654.         //fileFieldSet.setHeadingText("Информация из файла по ремонту");
  655.         fileFieldSet.setHeadingText("Информация по ремонту");
  656.         fileFieldSet.setCollapsible(true);
  657.         fileFieldSet.setLayoutData(repairVerticalData);
  658.         verticalLayoutContainer.add(fileFieldSet);
  659.  
  660.         VerticalLayoutContainer fileContainer = new VerticalLayoutContainer();
  661.         fileFieldSet.add(fileContainer);
  662.  
  663.  
  664.  
  665.         FieldSet fileRepairFieldSet = new FieldSet();
  666.         fileRepairFieldSet.setHeadingText("Ремонт");
  667.         fileRepairFieldSet.setCollapsible(true);
  668.         fileRepairFieldSet.setLayoutData(verticalData);
  669.         fileContainer.add(fileRepairFieldSet);
  670.  
  671.         VerticalLayoutContainer fileRepairContainer = new VerticalLayoutContainer();
  672.         fileRepairFieldSet.add(fileRepairContainer);
  673.  
  674.         HBoxLayoutContainer horizontalLayoutContainerFileFirstLine =  new HBoxLayoutContainer();
  675.         fileRepairContainer.add(horizontalLayoutContainerFileFirstLine);
  676.         HBoxLayoutContainer horizontalLayoutContainerFileSecondLine =  new HBoxLayoutContainer();
  677.         fileRepairContainer.add(horizontalLayoutContainerFileSecondLine);
  678.         HBoxLayoutContainer horizontalLayoutContainerFileThirdLine =  new HBoxLayoutContainer();
  679.         fileRepairContainer.add(horizontalLayoutContainerFileThirdLine);
  680.         HBoxLayoutContainer horizontalLayoutContainerFileForthLine =  new HBoxLayoutContainer();
  681.         fileRepairContainer.add(horizontalLayoutContainerFileForthLine);
  682.  
  683.         horizontalLayoutContainerFileFirstLine.add(createFieldLabel(repairTypes, "Вид ремонта", repairLineFieldData, 150), repairLineFieldData);
  684.  
  685.         horizontalLayoutContainerFileSecondLine.add(createFieldLabel(defectType1, "Тип неисправности 1", repairLineFieldData, 150), repairLineFieldData);
  686.         horizontalLayoutContainerFileSecondLine.add(createFieldLabelAutoWidth(defect1, "Неисправность 1", repairLineFieldData), repairLineFieldData);
  687.  
  688.         horizontalLayoutContainerFileThirdLine.add(createFieldLabel(defectType2, "Тип неисправности 2", repairLineFieldData, 150), repairLineFieldData);
  689.         horizontalLayoutContainerFileThirdLine.add(createFieldLabelAutoWidth(defect2, "Неисправность 2", repairLineFieldData), repairLineFieldData);
  690.  
  691.         horizontalLayoutContainerFileForthLine.add(createFieldLabel(defectType3, "Тип неисправности 3", repairLineFieldData, 150), repairLineFieldData);
  692.  
  693.         FieldSet fileStationsDepotFieldSet = new FieldSet();
  694.         fileStationsDepotFieldSet.setHeadingText("Станции и Депо");
  695.         fileStationsDepotFieldSet.setCollapsible(true);
  696.         fileStationsDepotFieldSet.setLayoutData(verticalData);
  697.         fileContainer.add(fileStationsDepotFieldSet);
  698.  
  699.         VerticalLayoutContainer fileStationsContainer = new VerticalLayoutContainer();
  700.         fileStationsDepotFieldSet.add(fileStationsContainer);
  701.         HBoxLayoutContainer horizontalLayoutContainerFileStationsLine =  new HBoxLayoutContainer();
  702.         fileStationsContainer.add(horizontalLayoutContainerFileStationsLine);
  703.  
  704.         horizontalLayoutContainerFileStationsLine.add(createTopFieldLabel(repairStation, "Станция ремонта", repairLineFieldData), repairLineLabelData);
  705.         horizontalLayoutContainerFileStationsLine.add(createTopFieldLabel(uncoupleStation, "Станция отцепки", repairLineFieldData), repairLineLabelData);
  706.         horizontalLayoutContainerFileStationsLine.add(createTopFieldLabel(currentStation, "Станция нахождения", repairLineFieldData), repairLineLabelData);
  707.         horizontalLayoutContainerFileStationsLine.add(createTopFieldLabel(railRoad, "Дорога", repairLineFieldData), repairLineLabelData);
  708.         horizontalLayoutContainerFileStationsLine.add(createTopFieldLabel(depot, "Депо", repairLineFieldData), repairLineLabelData);
  709.  
  710.         FieldSet fileDatesFieldSet = new FieldSet();
  711.         fileDatesFieldSet.setHeadingText("Временные параметры и даты");
  712.         fileDatesFieldSet.setCollapsible(true);
  713.         fileDatesFieldSet.setLayoutData(verticalData);
  714.         fileContainer.add(fileDatesFieldSet);
  715.  
  716.         VerticalLayoutContainer fileDatesContainer = new VerticalLayoutContainer();
  717.         fileDatesFieldSet.add(fileDatesContainer);
  718.  
  719.         HBoxLayoutContainer horizontalLayoutContainerFileDatesFirstLine =  new HBoxLayoutContainer();
  720.         fileDatesContainer.add(horizontalLayoutContainerFileDatesFirstLine);
  721.  
  722.         HBoxLayoutContainer horizontalLayoutContainerFileDatesSecondLine =  new HBoxLayoutContainer();
  723.         fileDatesContainer.add(horizontalLayoutContainerFileDatesSecondLine);
  724.  
  725.         vu23Date.setAllowBlank(false);
  726.  
  727.         //this.editedEntity
  728.         Validator<Date> dateValidator = new Validator<Date>() {
  729.             @Override
  730.             public List<EditorError> validate(Editor<Date> editor, Date value) {
  731.                 List<EditorError> errors = new ArrayList<>();
  732.                 if(startDate.getValue() == null && endDate.getValue() == null) {
  733.                     return null;
  734.                 }
  735.                 if(startDate.getValue() == null && endDate.getValue() != null) {
  736.                     errors.add(new SimpleEditorError(startDate, value, "Дата начала ремонта должна быть указана"));
  737.                     return errors;
  738.                 }
  739.                 if(startDate.getValue().compareTo(endDate.getValue()) > 0) {
  740.                     errors.add(new SimpleEditorError(editor, value, "Дата окончания ремонта не может быть раньше даты начала ремонта"));
  741.                     return errors;
  742.                 }
  743.                 return null;
  744.             }
  745.         };
  746.         startDate.addValidator(dateValidator);
  747.         endDate.addValidator(dateValidator);
  748.         horizontalLayoutContainerFileDatesFirstLine.add(createTopFieldLabel(vu23Date, "Дата ВУ-23", repairLineFieldData), repairLineLabelData);
  749.         horizontalLayoutContainerFileDatesFirstLine.add(createTopFieldLabel(startDate, "Начало ремонта", repairLineFieldData), repairLineLabelData);
  750.         horizontalLayoutContainerFileDatesFirstLine.add(createTopFieldLabel(endDate, "Конец ремонта", repairLineFieldData), repairLineLabelData);
  751.         horizontalLayoutContainerFileDatesFirstLine.add(createTopFieldLabel(vu23Vu36Days, "От ВУ-23 до ВУ-36 (в сутках)", repairLineFieldData), repairLineLabelData);
  752.  
  753.         horizontalLayoutContainerFileDatesSecondLine.add(createTopFieldLabel(repairDays, "Суток в ремонте", repairLineFieldData), repairLineLabelData);
  754.         horizontalLayoutContainerFileDatesSecondLine.add(createTopFieldLabel(downtimeOnStation, "Простой на ст. ремонта", repairLineFieldData), repairLineLabelData);
  755.         horizontalLayoutContainerFileDatesSecondLine.add(createTopFieldLabel(carNextRepairDate, "Дата планового ремонта по паспорту", repairLineFieldData), repairLineLabelData);
  756.  
  757.         // not editable because the date is stored and edited at Cars
  758.         carNextRepairDate.setReadOnly(true);
  759.     }
  760.  
  761.     protected void fillDocumentsTabPanel(InsertResizeContainer container){
  762.  
  763.         FieldSet provisionalInvoiceFieldSet = new FieldSet();
  764.         provisionalInvoiceFieldSet.setHeadingText("Счет предварительный");
  765.         provisionalInvoiceFieldSet.setCollapsible(false);
  766.         provisionalInvoiceFieldSet.setLayoutData(repairVerticalData);
  767.         container.add(provisionalInvoiceFieldSet);
  768.  
  769.         VerticalLayoutContainer provisionalInvoiceContainer = new VerticalLayoutContainer();
  770.         provisionalInvoiceFieldSet.add(provisionalInvoiceContainer);
  771.  
  772.         HBoxLayoutContainer horizontalLayoutContainerProvisionalInvoiceLine =  new HBoxLayoutContainer();
  773.         provisionalInvoiceContainer.add(horizontalLayoutContainerProvisionalInvoiceLine);
  774.  
  775.         horizontalLayoutContainerProvisionalInvoiceLine.add(createFieldLabelAutoWidth(provisionalInvoiceNumber, "Номер", repairLineFieldData), repairLineLabelData);
  776.         horizontalLayoutContainerProvisionalInvoiceLine.add(createFieldLabelAutoWidth(provisionalInvoiceDate, "Дата", repairLineFieldData), repairLineLabelData);
  777.         horizontalLayoutContainerProvisionalInvoiceLine.add(createFieldLabelAutoWidth(provisionalInvoiceAmount, "Сумма", repairLineFieldData), repairLineLabelData);
  778.         provisionalInvoiceAmount.addValueChangeHandler(new ValueChangeHandler<Float>() {
  779.             @Override
  780.             public void onValueChange(ValueChangeEvent<Float> event) {
  781.                 recalculateDefectReadOnlyDocumentFields();
  782.             }
  783.         });
  784.  
  785.         vu53Container = new HBoxLayoutContainer();
  786.         vu53Container.add(getVu53Panel(), new BoxLayoutContainer.BoxLayoutData(new Margins(10)));
  787.  
  788.         listCompletionContainer = new HBoxLayoutContainer();
  789.         listCompletionContainer.add(getListCompletionPanel(), new BoxLayoutContainer.BoxLayoutData(new Margins(10)));
  790.  
  791.  
  792.         FieldSet documentsFieldSet = new FieldSet();
  793.         documentsFieldSet.setHeadingText("Документы");
  794.         documentsFieldSet.setCollapsible(false);
  795.         documentsFieldSet.setLayoutData(repairVerticalData);
  796.         container.add(documentsFieldSet);
  797.  
  798.         HBoxLayoutContainer documentsWithAttachmentsLayoutContainer = new HBoxLayoutContainer();
  799.  
  800.         VerticalLayoutContainer documentsCommonLayoutContainer = new VerticalLayoutContainer();
  801.         documentsCommonLayoutContainer.setWidth(750);
  802.         HBoxLayoutContainer documentsHeaderLayoutContainer = new HBoxLayoutContainer();
  803.         documentsHeaderLayoutContainer.setPadding(new Padding(5));
  804.         documentsHeaderLayoutContainer.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.TOP);
  805.  
  806.         documentsLayoutContainer = new VerticalLayoutContainer();
  807.         documentsLayoutContainer.setScrollMode(ScrollSupport.ScrollMode.AUTOY);
  808.         documentsLayoutContainer.setHeight(450);
  809.  
  810.         documentsWithAttachmentsLayoutContainer.add(documentsCommonLayoutContainer);
  811.         uploadComponent = new UploadComponent("repair-attachments", "Список файлов", 200, 505){
  812.             @Override
  813.             protected void sendRequestForAttachment(String guid, Receiver<AttachmentProxy> receiver){
  814.                 service.attachments().findByGuid(guid).fire(receiver);
  815.             }
  816.             @Override
  817.             protected AttachmentProxy openAttachmentForEdit(AttachmentProxy ap){
  818.                 return context.edit(ap);
  819.             }
  820.         };
  821.         documentsWithAttachmentsLayoutContainer.add(uploadComponent, new BoxLayoutContainer.BoxLayoutData(new Margins(0, 0, 0, 10)));
  822.         documentsWithAttachmentsLayoutContainer.add(uploadComponent.getUploader());
  823.         attachments = uploadComponent.getAttachmentStoreEditor();
  824.  
  825.         documentsFieldSet.add(documentsWithAttachmentsLayoutContainer);
  826.         int commonLabelWidth = 100;
  827.         BoxLayoutContainer.BoxLayoutData boxLayoutRight10 = new BoxLayoutContainer.BoxLayoutData(new Margins(0, 5, 0, 0));
  828.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Наименование документа", 135), boxLayoutRight10);
  829.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Наличие", 50), boxLayoutRight10);
  830.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Дата поступления электронной версии", commonLabelWidth), boxLayoutRight10);
  831.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Дата поступления оригинала", commonLabelWidth), boxLayoutRight10);
  832.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Сумма", commonLabelWidth), boxLayoutRight10);
  833.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Номер документа", commonLabelWidth), boxLayoutRight10);
  834.         documentsHeaderLayoutContainer.add(createLabelCenterTextAlign("Дата документа", commonLabelWidth));
  835.         documentsHeaderLayoutContainer.setBorders(true);
  836.         documentsCommonLayoutContainer.add(documentsHeaderLayoutContainer);
  837.         documentsCommonLayoutContainer.add(documentsLayoutContainer);
  838.  
  839.         repairDocuments  = new ListStoreEditor<RepairDocumentProxy>(new ListStore<>(repairDocumentProps.key()));
  840.         completionList  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  841.         completionRecordProxyListStore.setAutoCommit(true);
  842.     }
  843.  
  844.  
  845.  
  846.     protected void fillPaymentsTabPanel(InsertResizeContainer container){
  847.  
  848.         payments = new ListStoreEditor<PaymentProxy>(new ListStore<PaymentProxy>(paymentProperties.key()));
  849.  
  850.  
  851.         FieldSet financeFieldSet = new FieldSet();
  852.         financeFieldSet.setHeadingText("Расчёт с депо");
  853.         financeFieldSet.setCollapsible(false);
  854.         financeFieldSet.setLayoutData(repairVerticalData);
  855.         container.add(financeFieldSet);
  856.  
  857.         HBoxLayoutContainer horizontalLayoutContainerHeader =  new HBoxLayoutContainer();
  858.         horizontalLayoutContainerHeader.setPadding(new Padding(5));
  859.         horizontalLayoutContainerHeader.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCHMAX);
  860.         financeFieldSet.add(horizontalLayoutContainerHeader);
  861.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(repairPaymentDebit, "Дебет", repairLineFieldData), repairLineLabelData);
  862.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(repairPaymentCredit, "Кредит", repairLineFieldData), repairLineLabelData);
  863.  
  864.  
  865.         FieldSet paymentSection = new FieldSet();
  866.         paymentSection.setHeadingText("Прикрепление платёжного поручения");
  867.         paymentSection.setCollapsible(false);
  868.         paymentSection.setLayoutData(repairVerticalData);
  869.         container.add(paymentSection);
  870.  
  871.         HBoxLayoutContainer horizontalLayoutContainerMain =  new HBoxLayoutContainer();
  872.         horizontalLayoutContainerMain.setPadding(new Padding(5));
  873.         horizontalLayoutContainerMain.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCH);
  874.         paymentSection.add(horizontalLayoutContainerMain);
  875.         RequestFactoryProxy<FilterPagingLoadConfig, List<PaymentProxy>> paymentRequestFactoryProxy =
  876.                 new RequestFactoryProxy<FilterPagingLoadConfig, List<PaymentProxy>>() {
  877.  
  878.                     @Override
  879.                     public void load(FilterPagingLoadConfig loadConfig, Receiver<? super List<PaymentProxy>> receiver) {
  880.                         service.paymentTools().openList().fire(receiver);
  881.                     }
  882.                 };
  883.         ListLoader paymentLoader = new ListLoader<FilterPagingLoadConfig, ListLoadResult<PaymentProxy>>(paymentRequestFactoryProxy, new ListReader<PaymentProxy>()){
  884.             @Override
  885.             protected FilterPagingLoadConfig newLoadConfig() {
  886.                 return new FilterPagingLoadConfigBean();
  887.             }
  888.         };
  889.  
  890.  
  891.  
  892.  
  893.         paymentGrid = new Grid(freePayments, getPaymentColumnModel());
  894.  
  895.         paymentLoader.setRemoteSort(true);
  896.         paymentLoader.addLoadHandler(new LoadResultListStoreBinding(paymentGrid.getStore()));
  897.  
  898.         paymentGrid.setLoader(paymentLoader);
  899.  
  900.         paymentGrid.setBorders(true);
  901.         paymentGrid.setWidth(400);
  902.         paymentGrid.setHeight(500);
  903.  
  904.         LiveGridView<PaymentProxy> paymentLiveGridView = new LiveGridView<PaymentProxy>(){
  905.             @Override
  906.             public void refresh(boolean headerToo) {
  907.                 preventScrollToTopOnRefresh = true;
  908.                 super.refresh(headerToo);
  909.             }
  910.         };
  911.         paymentLiveGridView.setPrefetchFactor(.6);
  912.         paymentLiveGridView.setCacheSize(300);
  913.         paymentLiveGridView.setForceFit(false);
  914.         paymentGrid.setView(paymentLiveGridView);
  915.  
  916.         paymentGrid.getView().setAutoFill(true);
  917.         paymentGrid.setLoadMask(false);
  918.  
  919.         horizontalLayoutContainerMain.add(paymentGrid);
  920.         FieldSet paymentDescriptionSection = new FieldSet();
  921.         paymentDescriptionSection.setHeadingText("Платёжное поручение");
  922.         paymentDescriptionSection.setCollapsible(false);
  923.         paymentDescriptionSection.setLayoutData(repairVerticalData);
  924.         paymentDescriptionSection.setWidth(250);
  925.         paymentDescriptionSection.setHeight(500);
  926.         horizontalLayoutContainerMain.add(paymentDescriptionSection, new BoxLayoutContainer.BoxLayoutData(new Margins(5,5,5,5)));
  927.  
  928.         VerticalLayoutContainer paymentDescriptionContainer = new VerticalLayoutContainer();
  929.         paymentDescriptionSection.add(paymentDescriptionContainer);
  930.  
  931.  
  932.         paymentDescriptionContainer.add(createFieldLabel(paymentNumber, "Номер", repairVerticalData, 60));
  933.         paymentDescriptionContainer.add(createFieldLabel(paymentLoadDate, "Дата", repairVerticalData, 60));
  934.         paymentDescriptionContainer.add(createFieldLabel(paymentAmount, "Сумма", repairVerticalData, 60));
  935.         paymentDescriptionContainer.add(createTopFieldLabel(paymentDetails, "Назначение", repairVerticalData));
  936.  
  937.         paymentDescriptionContainer.add(paymentButton, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(100,5,5,100)));
  938.  
  939.         paymentGrid.getSelectionModel().setSelectionMode(Style.SelectionMode.SINGLE);
  940.         paymentGrid.addRowClickHandler(new RowClickEvent.RowClickHandler() {
  941.             @Override
  942.             public void onRowClick(RowClickEvent rowClickEvent) {
  943.                 PaymentProxy proxy = paymentGrid.getSelectionModel().getSelectedItem();
  944.                 paymentButton.setText(payments.getStore().findModelWithKey(paymentProperties.key().getKey(proxy)) != null ? "Открепить" : "Прикрепить");
  945.                 paymentNumber.setValue(proxy.getNumber());
  946.                 paymentLoadDate.setValue(proxy.getLoadDate());
  947.                 paymentAmount.setValue(proxy.getAmount());
  948.                 paymentDetails.setValue(proxy.getDetails());
  949.             }
  950.         });
  951.  
  952.         paymentButton.addSelectHandler(new SelectEvent.SelectHandler() {
  953.             @Override
  954.             public void onSelect(SelectEvent selectEvent) {
  955.                 PaymentProxy proxy = paymentGrid.getSelectionModel().getSelectedItem();
  956.                 if (proxy != null){
  957.                     PaymentProxy realProxy =  payments.getStore().findModelWithKey(paymentProperties.key().getKey(proxy));
  958.                     if (realProxy != null) payments.getStore().remove(realProxy);
  959.                     else {
  960.                         payments.getStore().add(context.edit(proxy));
  961.                     }
  962.                     paymentButton.setText(payments.getStore().findModelWithKey(paymentProperties.key().getKey(proxy)) != null ? "Открепить" : "Прикрепить");
  963.                 }
  964.             }
  965.         });
  966.  
  967.         FieldSet invoiceDescriptionSection = new FieldSet();
  968.         invoiceDescriptionSection.setHeadingText("Счёт-фактура");
  969.         invoiceDescriptionSection.setCollapsible(false);
  970.         invoiceDescriptionSection.setLayoutData(repairVerticalData);
  971.         invoiceDescriptionSection.setWidth(250);
  972.         invoiceDescriptionSection.setHeight(500);
  973.         horizontalLayoutContainerMain.add(invoiceDescriptionSection, new BoxLayoutContainer.BoxLayoutData(new Margins(5,5,5,5)));
  974.         VerticalLayoutContainer invoiceDescriptionContainer = new VerticalLayoutContainer();
  975.         invoiceDescriptionSection.add(invoiceDescriptionContainer);
  976.  
  977.         invoiceDescriptionContainer.add(createFieldLabel(invoiceNumber, "Номер", repairVerticalData, 60));
  978.         invoiceDescriptionContainer.add(createFieldLabel(invoiceLoadDate, "Дата", repairVerticalData, 60));
  979.         invoiceDescriptionContainer.add(createFieldLabel(invoiceAmount, "Сумма", repairVerticalData, 60));
  980.     }
  981.  
  982.  
  983.     private ColumnModel<PaymentProxy> getPaymentColumnModel(){
  984.         List<ColumnConfig<PaymentProxy, ?>> list = new ArrayList<ColumnConfig<PaymentProxy, ?>>();
  985.         list.add(new ColumnConfig<PaymentProxy, String>(paymentProperties.number(), 80, "№"));
  986.  
  987.         list.add(getDateColumnConfig(paymentProperties.loadDate(), 80, "Дата"));
  988.         list.add(new ColumnConfig<PaymentProxy, Float>(paymentProperties.amount(),80,"Сумма"));
  989.         list.add(getPaymentRepairCarNumber(paymentProperties.repairs()));
  990.  
  991.         return new ColumnModel<PaymentProxy>(list);
  992.     }
  993.  
  994.     protected void fillDefectsTabPanel(InsertResizeContainer container){
  995.         VerticalLayoutContainer verticalLayoutContainer =  new VerticalLayoutContainer();
  996.         container.add(verticalLayoutContainer);
  997.         partsFieldSet = new RepairDefectPartsFieldSet(975, 370){
  998.             @Override
  999.             protected void onChangeValues(){
  1000.                 recalculateDefectReadOnlyOtherFields();
  1001.             }
  1002.         };
  1003.         partsFieldSet.setCollapsible(false);
  1004.         partsFieldSet.setLayoutData(repairVerticalData);
  1005.         repairDefects = partsFieldSet.getDefectStoreEditor();
  1006.         FieldSet header = new FieldSet();
  1007.         header.setHeadingText("Затраты по ремонту");
  1008.         header.setCollapsible(false);
  1009.         header.setLayoutData(repairVerticalData);
  1010.  
  1011.         HBoxLayoutContainer horizontalLayoutContainerHeader =  new HBoxLayoutContainer();
  1012.         horizontalLayoutContainerHeader.setPadding(new Padding(5));
  1013.         horizontalLayoutContainerHeader.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCHMAX);
  1014.         header.add(horizontalLayoutContainerHeader);
  1015.  
  1016.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(defectsRepairSum, "Сумма ремонта", repairLineFieldData), repairLineLabelData);
  1017.         horizontalLayoutContainerHeader.add(createFieldLabelAutoWidth(defectsWorkSum, "Стоимость работ", repairLineFieldData), repairLineLabelData);
  1018.  
  1019.         FieldSet footer = new FieldSet();
  1020.         footer.setHeadingText("Итого");
  1021.         footer.setCollapsible(false);
  1022.         footer.setLayoutData(repairVerticalData);
  1023.  
  1024.         HBoxLayoutContainer horizontalLayoutContainerOuterFooter =  new HBoxLayoutContainer();
  1025.         horizontalLayoutContainerOuterFooter.setPadding(new Padding(5));
  1026.         horizontalLayoutContainerOuterFooter.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCHMAX);
  1027.  
  1028.         VerticalLayoutContainer verticalLayoutFooterContainer =  new VerticalLayoutContainer();
  1029.         horizontalLayoutContainerOuterFooter.add(verticalLayoutFooterContainer);
  1030.  
  1031.         HBoxLayoutContainer horizontalLayoutContainerFooter =  new HBoxLayoutContainer();
  1032.         horizontalLayoutContainerFooter.setPadding(new Padding(5));
  1033.         horizontalLayoutContainerFooter.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCHMAX);
  1034.         verticalLayoutFooterContainer.add(horizontalLayoutContainerFooter);
  1035.  
  1036.         HBoxLayoutContainer horizontalLayoutContainerSubFooter =  new HBoxLayoutContainer();
  1037.         horizontalLayoutContainerSubFooter.setPadding(new Padding(5));
  1038.         horizontalLayoutContainerSubFooter.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.STRETCHMAX);
  1039.         verticalLayoutFooterContainer.add(horizontalLayoutContainerSubFooter);
  1040.  
  1041.         footer.add(horizontalLayoutContainerOuterFooter);
  1042.  
  1043.         defectsAbout.setWidth(200);
  1044.         defectsAbout.setHeight(65);
  1045.         horizontalLayoutContainerFooter.add(createFieldLabel(defectsTotalSumWithoutTaxes, "Итого, без НДС", repairLineFieldData), repairLineLabelData);
  1046.         horizontalLayoutContainerFooter.add(createFieldLabel(defectsTotalSumTaxes, "Итого, 18%", repairLineFieldData), repairLineLabelData);
  1047.         horizontalLayoutContainerSubFooter.add(createFieldLabel(defectsTotalSumWithTaxes, "Итого, с НДС", repairLineFieldData), repairLineLabelData);
  1048.         horizontalLayoutContainerSubFooter.add(createFieldLabel(defectsTotalSaveSum, "Экономия", repairLineFieldData), repairLineLabelData);
  1049.         horizontalLayoutContainerOuterFooter.add(createFieldLabel(defectsAbout, "Примечание", repairLineFieldData), repairLineLabelData);
  1050.         verticalLayoutContainer.add(header);
  1051.         verticalLayoutContainer.add(partsFieldSet);
  1052.         verticalLayoutContainer.add(footer);
  1053.     }
  1054.  
  1055.     private Label createLabelCenterTextAlign(String text, int width){
  1056.         return createLabelText(text, width, HasHorizontalAlignment.ALIGN_CENTER);
  1057.     }
  1058.  
  1059.     private Label createLabelText(String text, int width, HasHorizontalAlignment.HorizontalAlignmentConstant horizontalAlignment){
  1060.         Label label = new Label(text);
  1061.         label.setWidth(width + "px");
  1062.         label.setHorizontalAlignment(horizontalAlignment);
  1063.         return label;
  1064.     }
  1065.  
  1066.     @Override
  1067.     protected void receiveData() {
  1068.         service.cars().list().fire(new Receiver<List<CarProxy>>() {
  1069.             @Override
  1070.             public void onSuccess(List<CarProxy> response) {
  1071.                 carStore.replaceAll(response);
  1072.             }
  1073.         });
  1074.  
  1075.         cargoEtsngStore.replaceAll(Injector.INSTANCE.transportRates());
  1076.  
  1077.         carLoadedStore.clear();
  1078.         carLoadedStore.addAll(java.util.Arrays.asList(new Boolean[]{false, true}));
  1079.         service.repairTypes().list().fire(new Receiver<List<RepairTypeProxy>>() {
  1080.             @Override
  1081.             public void onSuccess(List<RepairTypeProxy> response) {
  1082.                 repairTypeStore.replaceAll(response);
  1083.             }
  1084.         });
  1085.         railwayStore.replaceAll(Injector.INSTANCE.railways());
  1086.  
  1087.         service.depots().list().fire(new Receiver<List<DepotProxy>>() {
  1088.             @Override
  1089.             public void onSuccess(List<DepotProxy> response) {
  1090.                 depotStore.replaceAll(response);
  1091.             }
  1092.         });
  1093.         defectType1.clear();
  1094.         defectType2.clear();
  1095.         defectType3.clear();
  1096.         defectType1.add(ResourceList.getDefectTypes());
  1097.         defectType2.add(ResourceList.getDefectTypes());
  1098.         defectType3.add(ResourceList.getDefectTypes());
  1099.  
  1100.         service.repairDocumentTypes().orderedList().fire(new Receiver<List<RepairDocumentTypeProxy>>() {
  1101.             @Override
  1102.             public void onSuccess(List<RepairDocumentTypeProxy> response) {
  1103.                 fillMxLabelContainer();
  1104.                 fillDocumentTypes(response);
  1105.             }
  1106.         });
  1107.  
  1108.         service.repairDefectTypes().orderedList().fire(new Receiver<List<RepairDefectTypeProxy>>() {
  1109.             @Override
  1110.             public void onSuccess(List<RepairDefectTypeProxy> response) {
  1111.                 partsFieldSet.fillRepairDefectTypeStore(response);
  1112.             }
  1113.         });
  1114.  
  1115.         service.repairDefectUnits().orderedList().fire(new Receiver<List<RepairDefectUnitProxy >> () {
  1116.             @Override
  1117.             public void onSuccess(List<RepairDefectUnitProxy> response) {
  1118.                 partsFieldSet.fillRepairDefectUnitStore(response);
  1119.             }
  1120.         });
  1121.  
  1122.     }
  1123.  
  1124.     @Override
  1125.     public void initValidators() {
  1126.  
  1127.     }
  1128.  
  1129.     @Override
  1130.     protected void initHandlers() {
  1131.         this.addBeforeSaveEventHandler(new BeforeSaveHandler() {
  1132.             @Override
  1133.             public void beforeSave(BeforeSaveEvent event) {
  1134.                 repairDocuments.flush();
  1135.                 completionList.flush();
  1136.                 attachments.flush();
  1137.                 repairDefects.flush();
  1138.                 payments.flush();
  1139.             }
  1140.         });
  1141.     }
  1142.  
  1143.     @Override
  1144.     public void clear() {
  1145.         uploadComponent.getUploader().clear();
  1146.     }
  1147.  
  1148.     @Override
  1149.     public void edit(RepairProxy element) {
  1150.         super.edit(element);
  1151.         //TODO: add logic for checking rights on editing repairs
  1152.         //infoTabPanel.setEnabled(false);
  1153.         refreshTabPanel();
  1154.         partsFieldSet.reinitContext(context);
  1155.  
  1156.         if (element != null) {
  1157.             fillCarFields(element.getCar());
  1158.             enableCargoField(element.getLoaded());
  1159.             fillCurrentStationFields(element.getCurrentStation());
  1160.             fillDebitCreditFields(element.getRepairDocuments(), element.getPayments());
  1161.             final boolean planned = element.getRepairType().getPlanned();
  1162.             hideNotUsingDocuments(planned);
  1163.             repairTypeStore.removeFilters();
  1164.             repairTypeStore.addFilter(new Store.StoreFilter<RepairTypeProxy>() {
  1165.                 @Override
  1166.                 public boolean select(Store<RepairTypeProxy> store, RepairTypeProxy parent, RepairTypeProxy item) {
  1167.                     return item.getPlanned() == planned;
  1168.                 }
  1169.             });
  1170.             setDocuments(true);
  1171.             refillCompletionStores(true);
  1172.             refreshAttachments(element.getAttachments());
  1173.             updateRepairTabsHeaders(planned);
  1174.             changeRepairTabs(planned);
  1175.             partsFieldSet.setRepairType(planned);
  1176.             partsFieldSet.resetFields(element.getRepairDefects());
  1177.         } else {
  1178.             partsFieldSet.resetFields();
  1179.         }
  1180.         refreshGrids();
  1181.         refreshCheckBoxes();
  1182.         refreshStores();
  1183.         recalculateDefectReadOnlyFields();
  1184.         refillPayments();
  1185.         refillClaims();
  1186.     }
  1187.  
  1188.     @Override
  1189.     public RepairProxy create() {
  1190.         RepairProxy result = super.create();
  1191.         infoTabPanel.setEnabled(true);
  1192.         fillCarFields(context.create(CarProxy.class));
  1193.         fillCurrentStationFields(context.create(RailwayProxy.class));
  1194.         setDocuments(false);
  1195.         refillCompletionStores(false);
  1196.         refreshAttachments(null);
  1197.         repairTypeStore.removeFilters();
  1198.         refreshTabPanel();
  1199.         refreshGrids();
  1200.         refreshCheckBoxes();
  1201.         partsFieldSet.reinitContext(context);
  1202.         partsFieldSet.resetFields();
  1203.         refreshStores();
  1204.         recalculateDefectReadOnlyFields();
  1205.         refillPayments();
  1206.         refillClaims();
  1207.         fillDebitCreditFields(null, null);
  1208.         return result;
  1209.     }
  1210.  
  1211.     private void refillPayments(){
  1212.         paymentGrid.getLoader().load();
  1213.     }
  1214.  
  1215.     private void refillClaims(){
  1216.         lesserTextField.clear();
  1217.         if (editedEntity != null && editedEntity.getRepairClaim() != null){
  1218.             RepairClaimProxy claim = editedEntity.getRepairClaim();
  1219.             repairClaimProxy = context.edit(claim);
  1220.             if (claim.getLessor() != null) lesserTextField.setValue(claim.getLessor());
  1221.         } repairClaimProxy = context.create(RepairClaimProxy.class);
  1222.         lesserTextField.addValueChangeHandler(new ValueChangeHandler<String>() {
  1223.             @Override
  1224.             public void onValueChange(ValueChangeEvent<String> event) {
  1225.                 repairClaimProxy.setLessor(event.getValue());
  1226.             }
  1227.         });
  1228.     }
  1229.  
  1230.  
  1231.     private void refreshTabPanel(){
  1232.         repairTabPanel.setActiveWidget(infoTabPanel);
  1233.         while (repairTabPanel.getWidgetCount()>1){
  1234.             repairTabPanel.remove(repairTabPanel.getWidgetCount()-1);
  1235.         }
  1236.     }
  1237.  
  1238.     private void changeRepairTabs(boolean planned){
  1239.         repairTabPanel.setActiveWidget(infoTabPanel);
  1240.         while (repairTabPanel.getWidgetCount()>1){
  1241.             repairTabPanel.remove(repairTabPanel.getWidgetCount()-1);
  1242.         }
  1243.         for (VerticalLayoutContainer container : planned ? planRepairTabs : currentRepairTabs)
  1244.             repairTabPanel.add(container, container.getTitle());
  1245.     }
  1246.  
  1247.     private void updateRepairTabsHeaders(boolean planned){
  1248.         defectsTabPanel.setTitle(planned ? "Данные по ремонтным частям без НДС 18%" : "Неисправности");
  1249.         defectsTabPanel.forceLayout();
  1250.     }
  1251.  
  1252.     private String getCompletionRecordProxyKey(String title, Integer number, Boolean isDocument) {
  1253.         return title + number + isDocument;
  1254.     }
  1255.  
  1256.     private void fillCarFields(CarProxy car){
  1257.         carFactory.setValue(car.getCarFactoryTitle());
  1258.         claimCarFactory.setValue(car.getCarFactoryTitle());
  1259.         if (car.getCarType() !=null) {
  1260.             carType.setValue(car.getCarType().getTitle());
  1261.         }
  1262.         else {
  1263.             carType.setValue(null);
  1264.             //carType.clear();
  1265.         }
  1266.         carOwner.setValue(car.getCarOwnerTitle());
  1267.         if (car.getBuildingDate() != null) carBuildingDate.setValue(dateTimeProperty.getFormat().format(car.getBuildingDate()));
  1268.         if (car.getNextRepairDate() != null) carBuildingDate.setValue(dateTimeProperty.getFormat().format(car.getNextRepairDate()));
  1269.         if(car.getBuildingDate() == null && car.getNextRepairDate() == null) {
  1270.             carBuildingDate.setValue(null);
  1271.             //carBuildingDate.clear();
  1272.         }
  1273.     }
  1274.  
  1275.     private void enableCargoField(Boolean flag){
  1276.         if (flag != null && flag){
  1277.             cargoEtsng.setEnabled(true);
  1278.         } else {
  1279.             cargoEtsng.setEnabled(false);
  1280.             cargoEtsng.setValue(null);
  1281.         }
  1282.     }
  1283.  
  1284.     private void fillCurrentStationFields(RailwayProxy railway){
  1285.         if (railway != null && railway.getRailroad() != null && railway.getRailroad().getTitle() != null) {
  1286.             railRoad.setValue(railway.getRailroad().getTitle());
  1287.         }
  1288.         else {
  1289.             railRoad.setValue(null);
  1290.             //railRoad.clear();
  1291.         }
  1292.     }
  1293.  
  1294.     private void fillDebitCreditFields(List<RepairDocumentProxy> docList, List<PaymentProxy> payList){
  1295.         Float debit = null;
  1296.         Float credit = null;
  1297.         if (docList != null){
  1298.             for (RepairDocumentProxy document: docList){
  1299.                 Float value = document.getAmount();
  1300.                 if (value != null){
  1301.                     if ("Счет-фактура".equals(document.getRepairDocumentType().getTitle())){
  1302.                         debit = debit == null? value : debit + value;
  1303.                     }
  1304.                 }
  1305.  
  1306.             }
  1307.  
  1308.         }
  1309.         if (payList != null){
  1310.             for (PaymentProxy payment: payList){
  1311.                 Float value = payment.getAmount();
  1312.                 if (value != null){
  1313.                     credit = credit == null? value : credit + value;
  1314.                 }
  1315.  
  1316.             }
  1317.  
  1318.         }
  1319.         repairDebit.setValue(debit == null? "Нет" : Float.toString((credit == null? debit : debit - credit)));
  1320.         repairCredit.setValue(credit == null? "Нет" : Float.toString((debit == null? credit : credit - debit)));
  1321.         repairPaymentDebit.setValue(debit == null? "Нет" : Float.toString((credit == null? debit : debit - credit)));
  1322.         repairPaymentCredit.setValue(credit == null? "Нет" : Float.toString((debit == null? credit : credit - debit)));
  1323.     }
  1324.  
  1325.     @Override
  1326.     protected FieldLabel createFieldLabel(Widget field, String label, MarginData marginData){
  1327.         FieldLabel fieldLabel = new FieldLabel(field, label);
  1328.         fieldLabel.setLayoutData(marginData);
  1329.         return fieldLabel;
  1330.     }
  1331.  
  1332.     protected FieldLabel createFieldLabelAutoWidth(Widget field, String label, MarginData marginData){
  1333.         FieldLabel fieldLabel = new FieldLabel(field, label);
  1334.         fieldLabel.setLayoutData(marginData);
  1335.         if (label != null) fieldLabel.setLabelWidth((int) Math.max(Math.ceil(label.length() * 7.5), 25));
  1336.         return fieldLabel;
  1337.     }
  1338.  
  1339.     protected FieldLabel createFieldLabel(Widget field, String label, MarginData marginData, int width){
  1340.         FieldLabel fieldLabel = new FieldLabel(field, label);
  1341.         fieldLabel.setLayoutData(marginData);
  1342.         fieldLabel.setLabelWidth(width);
  1343.         return fieldLabel;
  1344.     }
  1345.  
  1346.     private void fillDocumentTypes(List<RepairDocumentTypeProxy>list){
  1347.         documentsLayoutContainer.clear();
  1348.         VerticalLayoutContainer.VerticalLayoutData verticalLayoutData = new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 0, 5, 0));
  1349.         repairDocTypePanels.clear();
  1350.         for (RepairDocumentTypeProxy documentTypeProxy : list){
  1351.             RepairDocTypePanel panel = new RepairDocTypePanel(documentTypeProxy);
  1352.             repairDocTypePanels.put(documentTypeProxy.getId(), panel);
  1353.             if (documentTypeProxy.getTypeID() == 4){
  1354.                 documentsLayoutContainer.add(mxLabelContainer, verticalLayoutData);
  1355.             }
  1356.             documentsLayoutContainer.add(panel, verticalLayoutData);
  1357.             if (documentTypeProxy.getTypeID() == 5){
  1358.                 documentsLayoutContainer.add(vu53Container);
  1359.                 vu53Container.hide();
  1360.             }
  1361.             if (documentTypeProxy.getTypeID() == 6){
  1362.                 documentsLayoutContainer.add(listCompletionContainer);
  1363.                 listCompletionContainer.hide();
  1364.             }
  1365.  
  1366.         }
  1367.     }
  1368.  
  1369.     private void hideNotUsingDocuments(boolean isPlannedReport){
  1370.         vu53Container.hide();
  1371.         listCompletionContainer.hide();
  1372.         mxLabelContainer.hide();
  1373.         for (RepairDocTypePanel panel : repairDocTypePanels.values()){
  1374.             panel.setVisible((!isPlannedReport && panel.isCurrent()) || (isPlannedReport && panel.isPlanned()));
  1375.             if (panel.getTypeId() == 4) mxLabelContainer.setVisible(isPlannedReport);
  1376.             panel.forceLayout();
  1377.         }
  1378.     }
  1379.  
  1380.     private void setDocuments(boolean checkEntity){
  1381.         for (RepairDocTypePanel panel : repairDocTypePanels.values()) panel.resetDocument(null);
  1382.         if (checkEntity){
  1383.         int size = repairDocuments.getStore().size();
  1384.             for (int i = 0; i < size; i++){
  1385.                 RepairDocumentProxy document = repairDocuments.getStore().get(i);
  1386.                 repairDocTypePanels.get(document.getRepairDocumentType().getId()).resetDocument(document);
  1387.             }
  1388.         }
  1389.     }
  1390.  
  1391.     private void refillCompletionStores(boolean checkEntity){
  1392.         completionRecordProxyListStore.clear();
  1393.         if (checkEntity){
  1394.             int size = completionList.getStore().size();
  1395.             for (int i = 0; i < size; i++){
  1396.                 completionRecordProxyListStore.add(completionList.getStore().get(i));
  1397.             }
  1398.         }
  1399.         refillVu53Stores();
  1400.         refillListCompletionStores();
  1401.         refillPanelCompletionStores();
  1402.     }
  1403.  
  1404.     private void refillVu53Stores(){
  1405.         ListStore<CompletionRecordProxy> completionRecordVu53FirstStore = completionRecordVu53FirstStoreEditor.getStore();
  1406.         ListStore<CompletionRecordProxy> completionRecordVu53LastStore = completionRecordVu53LastStoreEditor.getStore();
  1407.         completionRecordVu53FirstStore.clear();
  1408.         completionRecordVu53LastStore.clear();
  1409.  
  1410.         completionRecordVu53FirstStore.addAll(getSeveralNewCompletionRecords("Колёсная пара", 4));
  1411.         completionRecordVu53FirstStore.addAll(getSeveralNewCompletionRecords("Боковая рама", 4));
  1412.         completionRecordVu53FirstStore.addAll(getSeveralNewCompletionRecords("Надрессорная балка", 2));
  1413.         completionRecordVu53FirstStore.addAll(getSeveralNewCompletionRecords("Автосцепка", 2));
  1414.  
  1415.         completionRecordVu53LastStore.addAll(getSeveralNewCompletionRecords("Поглощающий аппарат", 2));
  1416.         completionRecordVu53LastStore.addAll(getSeveralNewCompletionRecords("Другое", 1));
  1417.  
  1418.  
  1419.     }
  1420.  
  1421.     private void refillListCompletionStores(){
  1422.         ListStore<CompletionRecordProxy> completionRecordAutoStore = completionRecordListCompletionAutoStoreEditor.getStore();
  1423.         ListStore<CompletionRecordProxy> completionRecord2FieldsStoreEditor = completionRecordListCompletion2FieldsStoreEditor.getStore();
  1424.         ListStore<CompletionRecordProxy> completionRecord4FieldsMainStoreEditor = completionRecordListCompletion4FieldsMainStoreEditor.getStore();
  1425.         ListStore<CompletionRecordProxy> completionRecord4FieldsLeftStoreEditor = completionRecordListCompletion4FieldsLeftStoreEditor.getStore();
  1426.         ListStore<CompletionRecordProxy> completionRecord4FieldsRightStoreEditor = completionRecordListCompletion4FieldsRightStoreEditor.getStore();
  1427.  
  1428.         completionRecordAutoStore.clear();
  1429.         completionRecord2FieldsStoreEditor.clear();
  1430.         completionRecord4FieldsMainStoreEditor.clear();
  1431.         completionRecord4FieldsLeftStoreEditor.clear();
  1432.         completionRecord4FieldsRightStoreEditor.clear();
  1433.  
  1434.         completionRecordAutoStore.addAll(getSeveralNewCompletionRecords("Автосцепка", 2));
  1435.  
  1436.         getSeveralNewCompletionRecords("Тяговые хомуты", 1);
  1437.  
  1438.         completionRecord2FieldsStoreEditor.addAll(getSeveralNewCompletionRecords("Поглощающий аппарат", 2));
  1439.         completionRecord2FieldsStoreEditor.addAll(getSeveralNewCompletionRecords("Тележка", 2));
  1440.  
  1441.         completionRecord4FieldsMainStoreEditor.addAll(getSeveralNewCompletionRecords("Боковая рама", 4));
  1442.         completionRecord4FieldsMainStoreEditor.addAll(getSeveralNewCompletionRecords("Надрессорная балка", 2));
  1443.         completionRecord4FieldsMainStoreEditor.addAll(getSeveralNewCompletionRecords("Колёсная пара", 4));
  1444.         completionRecord4FieldsLeftStoreEditor.addAll(getSeveralNewCompletionRecords("Колёсная пара", 4));
  1445.         completionRecord4FieldsRightStoreEditor.addAll(getSeveralNewCompletionRecords("Колёсная пара", 4));
  1446.  
  1447.         getSeveralNewCompletionRecords("Тормозное оборудование", 1);
  1448.     }
  1449.  
  1450.     private void refillPanelCompletionStores(){
  1451.         ListStore<CompletionRecordProxy> wheels = completionRecordPartWheelsStoreEditor.getStore();
  1452.         ListStore<CompletionRecordProxy> beam = completionRecordPartBeamStoreEditor.getStore();
  1453.         ListStore<CompletionRecordProxy> frame = completionRecordPartFrameStoreEditor.getStore();
  1454.  
  1455.         wheels.clear();
  1456.         beam.clear();
  1457.         frame.clear();
  1458.  
  1459.         wheels.addAll(getSeveralNewCompletionRecords("Колёсная пара", 4, false));
  1460.         frame.addAll(getSeveralNewCompletionRecords("Боковая рама", 4, false));
  1461.         beam.addAll(getSeveralNewCompletionRecords("Надрессорная балка", 2, false));
  1462.     }
  1463.  
  1464.  
  1465.     public List<CompletionRecordProxy> getSeveralNewCompletionRecords(String title, int count){
  1466.         return getSeveralNewCompletionRecords(title, count, true);
  1467.     }
  1468.     public List<CompletionRecordProxy> getSeveralNewCompletionRecords(String title, int count, boolean isDocument){
  1469.         List<CompletionRecordProxy> list = new ArrayList<>();
  1470.         for (int i = 1; i<= count; i++){
  1471.             CompletionRecordProxy cpr = completionRecordProxyListStore.findModelWithKey(getCompletionRecordProxyKey(title, i, isDocument));
  1472.             if (cpr == null){
  1473.                 cpr = context.create(CompletionRecordProxy.class);
  1474.                 cpr.setTitle(title);
  1475.                 cpr.setNumber(i);
  1476.                 cpr.setDocument(isDocument);
  1477.                 completionRecordProxyListStore.add(cpr);
  1478.             }
  1479.             list.add(cpr);
  1480.         }
  1481.         return list;
  1482.     }
  1483.  
  1484.     private SafeHtml getMultiLineHeader(String... headers){
  1485.         SafeHtmlBuilder shb = new SafeHtmlBuilder();
  1486.         StringBuilder sb = new StringBuilder("");
  1487.         for (String s : headers){
  1488.             sb.append('\n').append(s);
  1489.         }
  1490.         shb.appendEscapedLines(sb.delete(0, 1).toString());
  1491.         return shb.toSafeHtml();
  1492.     }
  1493.  
  1494.  
  1495.     private Widget getVu53Panel(){
  1496.  
  1497.         completionRecordVu53FirstStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1498.         completionRecordVu53LastStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1499.         VerticalLayoutContainer vlc = new VerticalLayoutContainer();
  1500.         ContentPanel panel = new ContentPanel();
  1501.         panel.setHeadingText("Акт замены запчастей ВУ-53");
  1502.         panel.setWidth(650);
  1503.         panel.setPosition(50, -1);
  1504.         GroupingView<CompletionRecordProxy> vu53FirstView = new GroupingView<CompletionRecordProxy>();
  1505.         GroupingView<CompletionRecordProxy> vu53LastView = new GroupingView<CompletionRecordProxy>();
  1506.  
  1507.  
  1508.  
  1509.         ColumnConfig<CompletionRecordProxy, String> ccVu53Grouping = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1510.             @Override
  1511.             public String getValue(CompletionRecordProxy object) {
  1512.                 return ResourceList.getCompletionGroups().get(object.getTitle());
  1513.             }
  1514.             @Override
  1515.             public void setValue(CompletionRecordProxy object, String value) {}
  1516.             @Override
  1517.             public String getPath() {return "";}
  1518.         });
  1519.  
  1520.         ColumnConfig<CompletionRecordProxy, String> ccVu53Grouping2 = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1521.             @Override
  1522.             public String getValue(CompletionRecordProxy object) {
  1523.                 return ResourceList.getCompletionGroups().get(object.getTitle());
  1524.             }
  1525.             @Override
  1526.             public void setValue(CompletionRecordProxy object, String value) {}
  1527.             @Override
  1528.             public String getPath() {return "";}
  1529.         });
  1530.  
  1531.  
  1532.         Comparator comparator = new Comparator<String>() {
  1533.             @Override
  1534.             public int compare(String o1, String o2) {
  1535.                 return ResourceList.getVu53GroupsNo().get(o1).compareTo(ResourceList.getVu53GroupsNo().get(o2));
  1536.             }
  1537.         };
  1538.         ccVu53Grouping.setComparator(comparator);
  1539.         ccVu53Grouping2.setComparator(comparator);
  1540.  
  1541.  
  1542.         ColumnConfig<CompletionRecordProxy, ?> ccVu53Title = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1543.             @Override
  1544.             public String getValue(CompletionRecordProxy object) {
  1545.                 String title = object.getTitle();
  1546.                 if (!"Другое".equals(title)) title += " " + object.getNumber();
  1547.                 return title;
  1548.             }
  1549.  
  1550.             @Override
  1551.             public void setValue(CompletionRecordProxy object, String value) {}
  1552.  
  1553.             @Override
  1554.             public String getPath() {return null;}
  1555.         }, 140, "Наименование");
  1556.  
  1557.  
  1558.         ColumnConfig<CompletionRecordProxy, Long> ccVu53numberOld = new ColumnConfig<CompletionRecordProxy, Long>(completionRecordProperties.numberOld(), 80);
  1559.         ccVu53numberOld.setHeader(getMultiLineHeader("Снято", "Номер"));
  1560.         ColumnConfig<CompletionRecordProxy, Integer> ccVu53codeOld = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.codeOld(), 80);
  1561.         ccVu53codeOld.setHeader(getMultiLineHeader("Снято", "Код", "изготовителя"));
  1562.         ColumnConfig<CompletionRecordProxy, Integer> ccVu53yearOld = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.yearOld(), 80);
  1563.         ccVu53yearOld.setHeader(getMultiLineHeader("Снято", "Год", "изготовления"));
  1564.         ColumnConfig<CompletionRecordProxy, Long> ccVu53numberNew = new ColumnConfig<CompletionRecordProxy, Long>(completionRecordProperties.numberNew(), 80);
  1565.         ccVu53numberNew.setHeader(getMultiLineHeader("Установлено", "Номер"));
  1566.         ColumnConfig<CompletionRecordProxy, Integer> ccVu53codeNew = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.codeNew(), 80);
  1567.         ccVu53codeNew.setHeader(getMultiLineHeader("Установлено", "Код", "изготовителя"));
  1568.         ColumnConfig<CompletionRecordProxy, Integer> ccVu53yearNew = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.yearNew(), 80);
  1569.         ccVu53yearNew.setHeader(getMultiLineHeader("Установлено", "Год", "изготовления"));
  1570.  
  1571.         ColumnConfig<CompletionRecordProxy, String> ccVu53textOld = new ColumnConfig<CompletionRecordProxy, String>(completionRecordProperties.textOld(), 240);
  1572.         ccVu53textOld.setHeader("Снято");
  1573.         ColumnConfig<CompletionRecordProxy, String> ccVu53textNew = new ColumnConfig<CompletionRecordProxy, String>(completionRecordProperties.textNew(), 240);
  1574.         ccVu53textNew.setHeader("Установлено");
  1575.  
  1576.  
  1577.  
  1578.         List<ColumnConfig<CompletionRecordProxy, ?>> vu53firstCC = new ArrayList<>();
  1579.         vu53firstCC.add(ccVu53Grouping);
  1580.         vu53firstCC.add(ccVu53Title);
  1581.         vu53firstCC.add(ccVu53numberOld);
  1582.         vu53firstCC.add(ccVu53codeOld);
  1583.         vu53firstCC.add(ccVu53yearOld);
  1584.         vu53firstCC.add(ccVu53numberNew);
  1585.         vu53firstCC.add(ccVu53codeNew);
  1586.         vu53firstCC.add(ccVu53yearNew);
  1587.  
  1588.         List<ColumnConfig<CompletionRecordProxy, ?>> vu53lastCC = new ArrayList<>();
  1589.         vu53lastCC.add(ccVu53Grouping2);
  1590.         vu53lastCC.add(ccVu53Title);
  1591.         vu53lastCC.add(ccVu53textOld);
  1592.         vu53lastCC.add(ccVu53textNew);
  1593.  
  1594.         Grid gridVu53First = new Grid<CompletionRecordProxy>(completionRecordVu53FirstStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(vu53firstCC));
  1595.         vu53FirstView.setAutoFill(false);
  1596.         vu53FirstView.setColumnLines(true);
  1597.         vu53FirstView.setSortingEnabled(false);
  1598.         vu53FirstView.setEnableGroupingMenu(false);
  1599.         vu53FirstView.setEnableNoGroups(false);
  1600.         vu53FirstView.setShowGroupedColumn(false);
  1601.         vu53FirstView.setForceFit(false);
  1602.         gridVu53First.setView(vu53FirstView);
  1603.         vu53FirstView.groupBy(ccVu53Grouping);
  1604.         completionRecordVu53FirstStoreEditor.getStore().setAutoCommit(true);
  1605.         gridsForRefresh.add(gridVu53First);
  1606.  
  1607.         Grid gridVu53Last = new Grid<CompletionRecordProxy>(completionRecordVu53LastStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(vu53lastCC));
  1608.         vu53LastView.setAutoFill(false);
  1609.         vu53LastView.setColumnLines(true);
  1610.         vu53LastView.setSortingEnabled(false);
  1611.         vu53LastView.setEnableGroupingMenu(false);
  1612.         vu53LastView.setEnableNoGroups(false);
  1613.         vu53LastView.setShowGroupedColumn(false);
  1614.         vu53LastView.setForceFit(false);
  1615.         gridVu53Last.setView(vu53LastView);
  1616.         vu53LastView.groupBy(ccVu53Grouping2);
  1617.         completionRecordVu53LastStoreEditor.getStore().setAutoCommit(true);
  1618.         gridsForRefresh.add(gridVu53Last);
  1619.  
  1620.         final GridInlineEditing<CompletionRecordProxy> firstEditing = new GridInlineEditing<CompletionRecordProxy>(gridVu53First);
  1621.         List<CompletionChecker> firstList = new ArrayList<>();
  1622.         firstEditing.addEditor(ccVu53numberOld, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  1623.         firstList.add(new CompletionNumberOldChecker());
  1624.         firstEditing.addEditor(ccVu53codeOld, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1625.         firstList.add(new CompletionCodeOldChecker());
  1626.         firstEditing.addEditor(ccVu53yearOld, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1627.         firstList.add(new CompletionYearOldChecker());
  1628.         firstEditing.addEditor(ccVu53numberNew, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  1629.         firstList.add(new CompletionNumberNewChecker());
  1630.         firstEditing.addEditor(ccVu53codeNew, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1631.         firstList.add(new CompletionCodeNewChecker());
  1632.         firstEditing.addEditor(ccVu53yearNew, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1633.         firstList.add(new CompletionYearNewChecker());
  1634.         completionCheckerList.put(completionRecordVu53FirstStoreEditor.getStore(), firstList);
  1635.  
  1636.         firstEditing.setRevertInvalid(true);
  1637.         firstEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  1638.             @Override
  1639.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  1640.                 CompletionRecordProxy cpr = completionRecordVu53FirstStoreEditor.getStore().get(event.getEditCell().getRow());
  1641.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  1642.                 refreshGrids();
  1643.             }
  1644.         });
  1645.         firstEditing.addStartEditHandler(new StartEditEvent.StartEditHandler<CompletionRecordProxy>() {
  1646.             @Override
  1647.             public void onStartEdit(StartEditEvent<CompletionRecordProxy> completionRecordProxyStartEditEvent) {
  1648.                 for (ColumnConfig cc : completionRecordProxyStartEditEvent.getSource().getEditableGrid().getColumnModel().getColumns()) {
  1649.                     Field field = completionRecordProxyStartEditEvent.getSource().getEditor(cc);
  1650.                     if (field != null && field instanceof NumberField ) {
  1651.                         if (!((NumberField)field).isCurrentValid()) ((NumberField)field).setText("");
  1652.                     }
  1653.                 }
  1654.             }
  1655.         });
  1656.         final GridInlineEditing<CompletionRecordProxy> lastEditing = new GridInlineEditing<CompletionRecordProxy>(gridVu53Last);
  1657.         List<CompletionChecker> lastList = new ArrayList<>();
  1658.         TextField textField = new TextField();
  1659.         textField.addValidator(new MaxLengthValidator(30));
  1660.         textField.setAutoValidate(true);
  1661.         lastEditing.addEditor(ccVu53textOld, textField);
  1662.         textField = new TextField();
  1663.         textField.addValidator(new MaxLengthValidator(30));
  1664.         textField.setAutoValidate(true);
  1665.         lastList.add(new CompletionTextOldChecker());
  1666.         lastEditing.addEditor(ccVu53textNew, textField);
  1667.         lastList.add(new CompletionTextNewChecker());
  1668.         completionCheckerList.put(completionRecordVu53LastStoreEditor.getStore(), firstList);
  1669.  
  1670.         lastEditing.setRevertInvalid(true);
  1671.         lastEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  1672.             @Override
  1673.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  1674.                 CompletionRecordProxy cpr = completionRecordVu53LastStoreEditor.getStore().get(event.getEditCell().getRow());
  1675.                 if (!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  1676.                 refreshGrids();
  1677.             }
  1678.         });
  1679.  
  1680.         vlc.add(gridVu53First, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  1681.         vlc.add(gridVu53Last, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  1682.         panel.add(vlc);
  1683.         return panel;
  1684.     }
  1685.  
  1686.  
  1687.     private Widget getListCompletionPanel(){
  1688.         completionRecordListCompletionAutoStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1689.         completionRecordListCompletion2FieldsStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1690.         completionRecordListCompletion4FieldsMainStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1691.         completionRecordListCompletion4FieldsLeftStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1692.         completionRecordListCompletion4FieldsRightStoreEditor  = new ListStoreEditor<CompletionRecordProxy>(new ListStore<CompletionRecordProxy>(completionKeyProvider));
  1693.  
  1694.  
  1695.         VerticalLayoutContainer vlc = new VerticalLayoutContainer();
  1696.         ContentPanel panel = new ContentPanel();
  1697.         panel.setHeadingText("Лист комплектации");
  1698.         panel.setWidth(650);
  1699.         panel.setPosition(50, -1);
  1700.  
  1701.         ColumnConfig<CompletionRecordProxy, Long> ccNumber = new ColumnConfig<CompletionRecordProxy, Long>(completionRecordProperties.numberNew(), 120, "Номер");
  1702.         ColumnConfig<CompletionRecordProxy, Integer> ccCode = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.codeNew(), 120, "Код изготовителя");
  1703.         ColumnConfig<CompletionRecordProxy, Integer> ccYear = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.yearNew(), 120, "Год изготовления");
  1704.         ColumnConfig<CompletionRecordProxy, String> ccKind = new ColumnConfig<CompletionRecordProxy, String>(completionRecordProperties.textNew(), 120, "Марка");
  1705.         ColumnConfig<CompletionRecordProxy, String> ccModel = new ColumnConfig<CompletionRecordProxy, String>(completionRecordProperties.textNew(), 480, "Модель");
  1706.         ColumnConfig<CompletionRecordProxy, Float> ccLeftFlange = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.flangeWidthLeft(), 120, "Толщина гребня");
  1707.         ColumnConfig<CompletionRecordProxy, Float> ccRightFlange = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.flangeWidthRight(), 120, "Толщина гребня");
  1708.         ColumnConfig<CompletionRecordProxy, Float> ccLeftRim = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.rimWidthLeft(), 120, "Толщина обода");
  1709.         ColumnConfig<CompletionRecordProxy, Float> ccRightRim = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.rimWidthRight(), 120, "Толщина обода");
  1710.         ColumnConfig<CompletionRecordProxy, Float> ccLeftRolled = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.rolledLeft(), 120, "Прокат");
  1711.         ColumnConfig<CompletionRecordProxy, Float> ccRightRolled = new ColumnConfig<CompletionRecordProxy, Float>(completionRecordProperties.rolledRight(), 120, "Прокат");
  1712.  
  1713.         Comparator comparator = new Comparator<String>() {
  1714.             @Override
  1715.             public int compare(String o1, String o2) {
  1716.                 return ResourceList.getListCompletionNo().get(o1).compareTo(ResourceList.getListCompletionNo().get(o2));
  1717.             }
  1718.         };
  1719.  
  1720.         ColumnConfig<CompletionRecordProxy, String> ccListGrouping = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1721.             @Override
  1722.             public String getValue(CompletionRecordProxy object) {
  1723.                 return ResourceList.getCompletionGroups().get(object.getTitle());
  1724.             }
  1725.             @Override
  1726.             public void setValue(CompletionRecordProxy object, String value) {}
  1727.             @Override
  1728.             public String getPath() {return "";}
  1729.         });
  1730.  
  1731.         ColumnConfig<CompletionRecordProxy, String> ccListGrouping2 = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1732.             @Override
  1733.             public String getValue(CompletionRecordProxy object) {
  1734.                 return ResourceList.getCompletionGroups().get(object.getTitle());
  1735.             }
  1736.             @Override
  1737.             public void setValue(CompletionRecordProxy object, String value) {}
  1738.             @Override
  1739.             public String getPath() {return "";}
  1740.         });
  1741.  
  1742.  
  1743.         ColumnConfig<CompletionRecordProxy, String> ccListGrouping3 = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1744.             @Override
  1745.             public String getValue(CompletionRecordProxy object) {
  1746.                 return ResourceList.getCompletionGroups().get(object.getTitle());
  1747.             }
  1748.             @Override
  1749.             public void setValue(CompletionRecordProxy object, String value) {}
  1750.             @Override
  1751.             public String getPath() {return "";}
  1752.         });
  1753.  
  1754.  
  1755.         ColumnConfig<CompletionRecordProxy, String> ccLeftGrouping = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1756.             @Override
  1757.             public String getValue(CompletionRecordProxy object) {
  1758.                 return "Геометрические размеры, Левое колесо";
  1759.             }
  1760.             @Override
  1761.             public void setValue(CompletionRecordProxy object, String value) {}
  1762.             @Override
  1763.             public String getPath() {return "";}
  1764.         });
  1765.         ColumnConfig<CompletionRecordProxy, String> ccRightGrouping = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1766.             @Override
  1767.             public String getValue(CompletionRecordProxy object) {
  1768.                 return "Геометрические размеры, Правое колесо";
  1769.             }
  1770.             @Override
  1771.             public void setValue(CompletionRecordProxy object, String value) {}
  1772.             @Override
  1773.             public String getPath() {return "";}
  1774.         });
  1775.  
  1776.         ccListGrouping.setComparator(comparator);
  1777.         ccListGrouping2.setComparator(comparator);
  1778.         ccListGrouping3.setComparator(comparator);
  1779.  
  1780.         ColumnConfig<CompletionRecordProxy, ?> ccTitle = new ColumnConfig<CompletionRecordProxy, String>(new ValueProvider<CompletionRecordProxy, String>() {
  1781.             @Override
  1782.             public String getValue(CompletionRecordProxy object) {
  1783.                 String title = object.getTitle();
  1784.                 if (!"Другое".equals(title)) title += " " + object.getNumber();
  1785.                 return title;
  1786.             }
  1787.  
  1788.             @Override
  1789.             public void setValue(CompletionRecordProxy object, String value) {}
  1790.  
  1791.             @Override
  1792.             public String getPath() {return null;}
  1793.         }, 140, "Наименование");
  1794.  
  1795.         ColumnConfig<CompletionRecordProxy, Integer> ccRealNumber = new ColumnConfig<CompletionRecordProxy, Integer>(completionRecordProperties.number());
  1796.  
  1797.         List<ColumnConfig<CompletionRecordProxy, ?>> listAutoCC = new ArrayList<>();
  1798.         listAutoCC.add(ccListGrouping);
  1799.         listAutoCC.add(ccTitle);
  1800.         listAutoCC.add(ccNumber);
  1801.         listAutoCC.add(ccCode);
  1802.         listAutoCC.add(ccYear);
  1803.         listAutoCC.add(ccKind);
  1804.  
  1805.         List<ColumnConfig<CompletionRecordProxy, ?>> list2FieldsCC = new ArrayList<>();
  1806.         list2FieldsCC.add(ccListGrouping2);
  1807.         list2FieldsCC.add(ccTitle);
  1808.         list2FieldsCC.add(ccModel);
  1809.  
  1810.         List<ColumnConfig<CompletionRecordProxy, ?>> list4FieldsCC = new ArrayList<>();
  1811.         list4FieldsCC.add(ccListGrouping3);
  1812.         list4FieldsCC.add(ccTitle);
  1813.         list4FieldsCC.add(ccNumber);
  1814.         list4FieldsCC.add(ccCode);
  1815.         list4FieldsCC.add(ccYear);
  1816.  
  1817.         List<ColumnConfig<CompletionRecordProxy, ?>> list4FieldsLeftCC = new ArrayList<>();
  1818.         list4FieldsLeftCC.add(ccLeftGrouping);
  1819.         list4FieldsLeftCC.add(ccRealNumber);
  1820.         list4FieldsLeftCC.add(ccLeftRim);
  1821.         list4FieldsLeftCC.add(ccLeftFlange);
  1822.         list4FieldsLeftCC.add(ccLeftRolled);
  1823.  
  1824.         List<ColumnConfig<CompletionRecordProxy, ?>> list4FieldsRightCC = new ArrayList<>();
  1825.         list4FieldsRightCC.add(ccRightGrouping);
  1826.         list4FieldsRightCC.add(ccRealNumber);
  1827.         list4FieldsRightCC.add(ccRightRim);
  1828.         list4FieldsRightCC.add(ccRightFlange);
  1829.         list4FieldsRightCC.add(ccRightRolled);
  1830.  
  1831.         Grid gridListAuto = new Grid<CompletionRecordProxy>(completionRecordListCompletionAutoStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(listAutoCC));
  1832.         gridListAuto.setTitle("Автосцепное оборудование");
  1833.         completionRecordListCompletionAutoStoreEditor.getStore().setAutoCommit(true);
  1834.         GroupingView<CompletionRecordProxy> autoFieldsView = new GroupingView<CompletionRecordProxy>();
  1835.         autoFieldsView.setAutoFill(false);
  1836.         autoFieldsView.setColumnLines(true);
  1837.         autoFieldsView.setSortingEnabled(false);
  1838.         autoFieldsView.setEnableGroupingMenu(false);
  1839.         autoFieldsView.setEnableNoGroups(false);
  1840.         autoFieldsView.setShowGroupedColumn(false);
  1841.         autoFieldsView.setForceFit(false);
  1842.         gridListAuto.setView(autoFieldsView);
  1843.         autoFieldsView.groupBy(ccListGrouping);
  1844.         final GridInlineEditing<CompletionRecordProxy> autoEditing = new GridInlineEditing<CompletionRecordProxy>(gridListAuto);
  1845.         List<CompletionChecker> autoList = new ArrayList<>();
  1846.         autoEditing.addEditor(ccNumber, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  1847.         autoList.add(new CompletionNumberNewChecker());
  1848.         autoEditing.addEditor(ccCode, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1849.         autoList.add(new CompletionCodeNewChecker());
  1850.         autoEditing.addEditor(ccYear, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1851.         autoList.add(new CompletionYearNewChecker());
  1852.         TextField textField = new TextField();
  1853.         textField.addValidator(new MaxLengthValidator(20));
  1854.         textField.setAutoValidate(true);
  1855.         autoEditing.addEditor(ccKind, textField);
  1856.         autoList.add(new CompletionTextNewChecker());
  1857.         autoEditing.setRevertInvalid(true);
  1858.         completionCheckerList.put(completionRecordListCompletionAutoStoreEditor.getStore(), autoList);
  1859.         autoEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  1860.             @Override
  1861.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  1862.                 CompletionRecordProxy cpr = completionRecordListCompletionAutoStoreEditor.getStore().get(event.getEditCell().getRow());
  1863.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  1864.                 refreshGrids();
  1865.             }
  1866.         });
  1867.         autoEditing.addStartEditHandler(new StartEditEvent.StartEditHandler<CompletionRecordProxy>() {
  1868.             @Override
  1869.             public void onStartEdit(StartEditEvent<CompletionRecordProxy> completionRecordProxyStartEditEvent) {
  1870.                 for (ColumnConfig cc : completionRecordProxyStartEditEvent.getSource().getEditableGrid().getColumnModel().getColumns()) {
  1871.                     Field field = completionRecordProxyStartEditEvent.getSource().getEditor(cc);
  1872.                     if (field != null && field instanceof NumberField ) {
  1873.                         if (!((NumberField)field).isCurrentValid()) ((NumberField)field).setText("");
  1874.                     }
  1875.                 }
  1876.             }
  1877.         });
  1878.         gridsForRefresh.add(gridListAuto);
  1879.  
  1880.         FieldSet yokeFieldSet = new FieldSet();
  1881.         yokeFieldSet.setHeadingText("Тяговый хомут");
  1882.         yokeFieldSet.setCollapsible(false);
  1883.  
  1884.         yokeFieldSet.add(getYokeContainer());
  1885.  
  1886.         Grid gridList2Fields = new Grid<CompletionRecordProxy>(completionRecordListCompletion2FieldsStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(list2FieldsCC));
  1887.         completionRecordListCompletion2FieldsStoreEditor.getStore().setAutoCommit(true);
  1888.         GroupingView<CompletionRecordProxy> list2FieldsView = new GroupingView<CompletionRecordProxy>();
  1889.         list2FieldsView.setAutoFill(false);
  1890.         list2FieldsView.setColumnLines(true);
  1891.         list2FieldsView.setSortingEnabled(false);
  1892.         list2FieldsView.setEnableGroupingMenu(false);
  1893.         list2FieldsView.setEnableNoGroups(false);
  1894.         list2FieldsView.setShowGroupedColumn(false);
  1895.         list2FieldsView.setForceFit(false);
  1896.         gridList2Fields.setView(list2FieldsView);
  1897.         list2FieldsView.groupBy(ccListGrouping2);
  1898.         final GridInlineEditing<CompletionRecordProxy> list2FieldsEditing = new GridInlineEditing<CompletionRecordProxy>(gridList2Fields);
  1899.         textField = new TextField();
  1900.         textField.addValidator(new MaxLengthValidator(30));
  1901.         textField.setAutoValidate(true);
  1902.  
  1903.         list2FieldsEditing.addEditor(ccModel, textField);
  1904.         completionCheckerList.put(completionRecordListCompletion2FieldsStoreEditor.getStore(), new ArrayList<CompletionChecker>(Arrays.asList(new CompletionTextNewChecker())));
  1905.         list2FieldsEditing.setRevertInvalid(true);
  1906.         list2FieldsEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  1907.             @Override
  1908.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  1909.                 CompletionRecordProxy cpr = completionRecordListCompletion2FieldsStoreEditor.getStore().get(event.getEditCell().getRow());
  1910.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  1911.                 refreshGrids();
  1912.             }
  1913.         });
  1914.  
  1915.         gridsForRefresh.add(gridList2Fields);
  1916.  
  1917.         Grid gridList4Fields = new Grid<CompletionRecordProxy>(completionRecordListCompletion4FieldsMainStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(list4FieldsCC));
  1918.         completionRecordListCompletion4FieldsMainStoreEditor.getStore().setAutoCommit(true);
  1919.         GroupingView<CompletionRecordProxy> list4FieldsView = new GroupingView<CompletionRecordProxy>();
  1920.         list4FieldsView.setAutoFill(false);
  1921.         list4FieldsView.setColumnLines(true);
  1922.         list4FieldsView.setSortingEnabled(false);
  1923.         list4FieldsView.setEnableGroupingMenu(false);
  1924.         list4FieldsView.setEnableNoGroups(false);
  1925.         list4FieldsView.setShowGroupedColumn(false);
  1926.         list4FieldsView.setForceFit(false);
  1927.         gridList4Fields.setView(list4FieldsView);
  1928.         list4FieldsView.groupBy(ccListGrouping3);
  1929.         final GridInlineEditing<CompletionRecordProxy> list4FieldsEditing = new GridInlineEditing<CompletionRecordProxy>(gridList4Fields);
  1930.         List<CompletionChecker> fields4List = new ArrayList<>();
  1931.  
  1932.         list4FieldsEditing.addEditor(ccNumber, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999999999l), new NumberPropertyEditor.LongPropertyEditor()));
  1933.         fields4List.add(new CompletionNumberNewChecker());
  1934.         list4FieldsEditing.addEditor(ccCode, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1935.         fields4List.add(new CompletionCodeNewChecker());
  1936.         list4FieldsEditing.addEditor(ccYear, getCompletionNumberFieldForEditor(new MaxNumberValidator(9999), new NumberPropertyEditor.IntegerPropertyEditor()));
  1937.         fields4List.add(new CompletionYearNewChecker());
  1938.         completionCheckerList.put(completionRecordListCompletion4FieldsMainStoreEditor.getStore(), fields4List);
  1939.  
  1940.         list4FieldsEditing.setRevertInvalid(true);
  1941.         list4FieldsEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  1942.             @Override
  1943.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  1944.                 CompletionRecordProxy cpr = completionRecordListCompletion4FieldsMainStoreEditor.getStore().get(event.getEditCell().getRow());
  1945.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  1946.                 refreshGrids();
  1947.             }
  1948.         });
  1949.         list4FieldsEditing.addStartEditHandler(new StartEditEvent.StartEditHandler<CompletionRecordProxy>() {
  1950.             @Override
  1951.             public void onStartEdit(StartEditEvent<CompletionRecordProxy> completionRecordProxyStartEditEvent) {
  1952.                 for (ColumnConfig cc : completionRecordProxyStartEditEvent.getSource().getEditableGrid().getColumnModel().getColumns()) {
  1953.                     Field field = completionRecordProxyStartEditEvent.getSource().getEditor(cc);
  1954.                     if (field != null && field instanceof NumberField ) {
  1955.                         if (!((NumberField)field).isCurrentValid()) ((NumberField)field).setText("");
  1956.                     }
  1957.                 }
  1958.             }
  1959.         });
  1960.         gridsForRefresh.add(gridList4Fields);
  1961.  
  1962.         Grid gridListLeft = new Grid<CompletionRecordProxy>(completionRecordListCompletion4FieldsLeftStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(list4FieldsLeftCC));
  1963.         completionRecordListCompletion4FieldsLeftStoreEditor.getStore().setAutoCommit(true);
  1964.         GroupingView<CompletionRecordProxy> leftFieldsView = new GroupingView<CompletionRecordProxy>();
  1965.         leftFieldsView.setAutoFill(false);
  1966.         leftFieldsView.setColumnLines(true);
  1967.         leftFieldsView.setSortingEnabled(false);
  1968.         leftFieldsView.setEnableGroupingMenu(false);
  1969.         leftFieldsView.setEnableNoGroups(false);
  1970.         leftFieldsView.setShowGroupedColumn(false);
  1971.         leftFieldsView.setForceFit(false);
  1972.         gridListLeft.setView(leftFieldsView);
  1973.         leftFieldsView.groupBy(ccLeftGrouping);
  1974.  
  1975.         final GridInlineEditing<CompletionRecordProxy> leftEditing = new GridInlineEditing<CompletionRecordProxy>(gridListLeft);
  1976.         List<CompletionChecker> leftList = new ArrayList<>();
  1977.         leftEditing.addEditor(ccLeftRim, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  1978.         leftList.add(new CompletionRimLeftChecker());
  1979.         leftEditing.addEditor(ccLeftFlange, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  1980.         leftList.add(new CompletionFlangeLeftChecker());
  1981.         leftEditing.addEditor(ccLeftRolled, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  1982.         leftList.add(new CompletionRolledLeftChecker());
  1983.  
  1984.         completionCheckerList.put(completionRecordListCompletion4FieldsLeftStoreEditor.getStore(), leftList);
  1985.         leftEditing.setRevertInvalid(true);
  1986.         leftEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  1987.             @Override
  1988.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  1989.                 CompletionRecordProxy cpr = completionRecordListCompletion4FieldsLeftStoreEditor.getStore().get(event.getEditCell().getRow());
  1990.                 if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  1991.                 refreshGrids();
  1992.             }
  1993.         });
  1994.         gridsForRefresh.add(gridListLeft);
  1995.  
  1996.         Grid gridListRight = new Grid<CompletionRecordProxy>(completionRecordListCompletion4FieldsLeftStoreEditor.getStore(), new ColumnModel<CompletionRecordProxy>(list4FieldsRightCC));
  1997.         completionRecordListCompletion4FieldsLeftStoreEditor.getStore().setAutoCommit(true);
  1998.         GroupingView<CompletionRecordProxy> rightFieldsView = new GroupingView<CompletionRecordProxy>();
  1999.         rightFieldsView.setAutoFill(false);
  2000.         rightFieldsView.setColumnLines(true);
  2001.         rightFieldsView.setSortingEnabled(false);
  2002.         rightFieldsView.setEnableGroupingMenu(false);
  2003.         rightFieldsView.setEnableNoGroups(false);
  2004.         rightFieldsView.setShowGroupedColumn(false);
  2005.         rightFieldsView.setForceFit(false);
  2006.         gridListRight.setView(rightFieldsView);
  2007.         rightFieldsView.groupBy(ccRightGrouping);
  2008.         final GridInlineEditing<CompletionRecordProxy> rightEditing = new GridInlineEditing<CompletionRecordProxy>(gridListRight);
  2009.         List<CompletionChecker> rightList = new ArrayList<>();
  2010.  
  2011.         rightEditing.addEditor(ccRightRim, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  2012.         leftList.add(new CompletionRimRightChecker());
  2013.         rightEditing.addEditor(ccRightFlange, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  2014.         leftList.add(new CompletionFlangeRightChecker());
  2015.         rightEditing.addEditor(ccRightRolled, new NumberField<Float>(new NumberPropertyEditor.FloatPropertyEditor()));
  2016.         leftList.add(new CompletionRolledRightChecker());
  2017.  
  2018.         completionCheckerList.put(completionRecordListCompletion4FieldsLeftStoreEditor.getStore(), rightList);
  2019.  
  2020.         rightEditing.setRevertInvalid(true);
  2021.         rightEditing.addCompleteEditHandler(new CompleteEditEvent.CompleteEditHandler<CompletionRecordProxy>() {
  2022.             @Override
  2023.             public void onCompleteEdit(CompleteEditEvent<CompletionRecordProxy> event) {
  2024.                 CompletionRecordProxy cpr = completionRecordListCompletion4FieldsRightStoreEditor.getStore().get(event.getEditCell().getRow());
  2025.                 if (!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  2026.                 refreshGrids();
  2027.             }
  2028.         });
  2029.         gridsForRefresh.add(gridListRight);
  2030.  
  2031.         FieldSet brakeEquipmentSet = new FieldSet();
  2032.         brakeEquipmentSet.setHeadingText("Тормозное оборудование");
  2033.         brakeEquipmentSet.setCollapsible(false);
  2034.         brakeEquipmentSet.add(getBrakeEquipmentContainer());
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.         vlc.add(gridListAuto, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2041.         vlc.add(yokeFieldSet, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2042.         vlc.add(gridList2Fields, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2043.         vlc.add(gridList4Fields, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2044.         vlc.add(gridListLeft, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2045.         vlc.add(gridListRight, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2046.         vlc.add(brakeEquipmentSet, new VerticalLayoutContainer.VerticalLayoutData(-1d, -1d, new Margins(5, 5, 5, 5)));
  2047.         refreshGrids();
  2048.         panel.add(vlc);
  2049.         return panel;
  2050.     }
  2051.  
  2052.     private HBoxLayoutContainer getBrakeEquipmentContainer(){
  2053.         brakeEquipmentCheckBoxesForRefresh.clear();
  2054.         String brakeEquipmentKey = getCompletionRecordProxyKey("Тормозное оборудование", 1, true);
  2055.         HBoxLayoutContainer brakeEquipmentContainer = new HBoxLayoutContainer();
  2056.         brakeEquipmentContainer.setPadding(new Padding(5));
  2057.         brakeEquipmentContainer.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.MIDDLE);
  2058.         brakeEquipmentContainer.setPack(BoxLayoutContainer.BoxLayoutPack.CENTER);
  2059.         BoxLayoutContainer.BoxLayoutData tbLayoutData = new BoxLayoutContainer.BoxLayoutData(new Margins(5, 0, 5, 0));
  2060.         BoxLayoutContainer.BoxLayoutData layoutData = new BoxLayoutContainer.BoxLayoutData(new Margins(5, 5, 5, 5));
  2061.         for (byte b = 0; b < 6; b++ ){
  2062.             brakeEquipmentCheckBoxesForRefresh.add(getCompletionCheckBox(b, brakeEquipmentKey));
  2063.             brakeEquipmentCheckBoxesForRefresh.get(b).setLayoutData(tbLayoutData);
  2064.             brakeEquipmentContainer.add(createFieldLabelAutoWidth(brakeEquipmentCheckBoxesForRefresh.get(b), ResourceList.getBreakEquipment().get(b), layoutData));
  2065.         }
  2066.         return brakeEquipmentContainer;
  2067.     }
  2068.  
  2069.     private HBoxLayoutContainer getYokeContainer(){
  2070.         yokeCheckBoxesForRefresh.clear();
  2071.         String yokeKey = getCompletionRecordProxyKey("Тяговые хомуты", 1, true);
  2072.         BoxLayoutContainer.BoxLayoutData yokeLayoutData = new BoxLayoutContainer.BoxLayoutData(new Margins(0, 50, 0, 10));
  2073.         HBoxLayoutContainer yokeContainer = new HBoxLayoutContainer();
  2074.         yokeContainer.setPadding(new Padding(5));
  2075.         yokeContainer.setHBoxLayoutAlign(HBoxLayoutContainer.HBoxLayoutAlign.MIDDLE);
  2076.         yokeContainer.setPack(BoxLayoutContainer.BoxLayoutPack.CENTER);
  2077.         for (byte b = 0; b < 2; b++ ){
  2078.             yokeCheckBoxesForRefresh.add(getCompletionCheckBox(b, yokeKey));
  2079.             yokeCheckBoxesForRefresh.get(b).setLayoutData(new BoxLayoutContainer.BoxLayoutData(new Margins(5, 5, 5, 5)) );
  2080.             yokeContainer.add(createFieldLabel(yokeCheckBoxesForRefresh.get(b), "Тяговый хомут " + (b + 1), repairLineFieldData), yokeLayoutData);
  2081.         }
  2082.         return yokeContainer;
  2083.     }
  2084.  
  2085.     private CheckBox getCompletionCheckBox(final byte position, final String key){
  2086.         CheckBox checkBox = new CheckBox();
  2087.         checkBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
  2088.             @Override
  2089.             public void onValueChange(ValueChangeEvent<Boolean> event) {
  2090.                 CompletionRecordProxy cpr = completionRecordProxyListStore.findModelWithKey(key);
  2091.                 setNumberCheckBoxValue(cpr, position, event.getValue());
  2092.             }
  2093.         });
  2094.         return checkBox;
  2095.     }
  2096.  
  2097.     private void refreshGrids(){
  2098.         if (gridsForRefresh != null){
  2099.             for(Grid grid : gridsForRefresh){
  2100.                 grid.getView().refresh(false);
  2101.             }
  2102.         }
  2103.     }
  2104.     private void refreshCheckBoxes(){
  2105.         if (yokeCheckBoxesForRefresh != null){
  2106.             for(byte i = 0; i < yokeCheckBoxesForRefresh.size(); i++){
  2107.                 yokeCheckBoxesForRefresh.get(i).setValue(getCheckBoxValue(i, getCompletionRecordProxyKey("Тяговые хомуты", 1, true)));
  2108.             }
  2109.         }
  2110.  
  2111.         if (brakeEquipmentCheckBoxesForRefresh != null){
  2112.             for(byte i = 0; i < brakeEquipmentCheckBoxesForRefresh.size(); i++){
  2113.                 brakeEquipmentCheckBoxesForRefresh.get(i).setValue(getCheckBoxValue(i, getCompletionRecordProxyKey("Тормозное оборудование", 1, true)));
  2114.             }
  2115.         }
  2116.     }
  2117.  
  2118.     private void refreshStores(){
  2119.         currentStation.getStore().replaceAll(railwayStore.getAll());
  2120.         repairStation.getStore().replaceAll(railwayStore.getAll());
  2121.         uncoupleStation.getStore().replaceAll(railwayStore.getAll());
  2122.     }
  2123.  
  2124.     private Boolean getCheckBoxValue(byte checkboxNumber, String key){
  2125.         CompletionRecordProxy cpr = completionRecordProxyListStore.findModelWithKey(key);
  2126.         if (cpr == null || cpr.getNumberNew() == null) return null;
  2127.         return checkMultiBooleanNumber(cpr.getNumberNew(), checkboxNumber);
  2128.     }
  2129.  
  2130.     private void setNumberCheckBoxValue(CompletionRecordProxy cpr, byte checkboxNumber, Boolean value){
  2131.         if (cpr == null) return;
  2132.         if (cpr.getNumberNew() == null) cpr.setNumberNew(0l);
  2133.         boolean _value = value == null ? false : value;
  2134.         cpr.setNumberNew(getMultiBooleanNumber(cpr.getNumberNew(), checkboxNumber, _value));
  2135.  
  2136.         if(!completionList.getStore().getAll().contains(cpr)) completionList.getStore().add(cpr);
  2137.     }
  2138.  
  2139.  
  2140.     private boolean checkMultiBooleanNumber(long number, byte place){
  2141.         int b = 1<<place;
  2142.         return b == (number & b);
  2143.     }
  2144.  
  2145.     private long getMultiBooleanNumber(long number, byte place, boolean value){
  2146.         int b = 1 << place;
  2147.         return value ? number | b : number ^ b;
  2148.     }
  2149.  
  2150.  
  2151.     public void fillMxLabelContainer(){
  2152.         mxLabelContainer =  new HBoxLayoutContainer();
  2153.         FlowPanel fp = new FlowPanel();
  2154.         fp.setWidth("150px");
  2155.         mxLabelContainer.add(fp);
  2156.  
  2157.         fp = new FlowPanel();
  2158.         fp.setWidth("55px");
  2159.         mxLabelContainer.add(fp);
  2160.  
  2161.         fp = new FlowPanel();
  2162.         fp.setWidth("105px");
  2163.         mxLabelContainer.add(fp);
  2164.  
  2165.         fp = new FlowPanel();
  2166.         fp.setWidth("105px");
  2167.         mxLabelContainer.add(fp);
  2168.  
  2169.         fp = new FlowPanel();
  2170.         fp.setWidth("105px");
  2171.         mxLabelContainer.add(fp);
  2172.  
  2173.         fp = new FlowPanel();
  2174.         fp.setWidth("105px");
  2175.         fp.add(new Label("Масса в тоннах"));
  2176.         mxLabelContainer.add(fp);
  2177.     }
  2178.  
  2179.     private void refreshAttachments(List<AttachmentProxy> list){
  2180.         AttachmentProxy ap = context.create(AttachmentProxy.class);
  2181.         uploadComponent.refresh(ap, list);
  2182.     }
  2183.  
  2184.     private void recalculateDefectReadOnlyDocumentFields(){
  2185.         Float repairSum = null;
  2186.         Float goods = null;
  2187.         Float finalInvoice = null;
  2188.         if (repairDocuments != null && repairDocuments.getStore() != null){
  2189.             for (RepairDocumentProxy document : repairDocuments.getStore().getAll()){
  2190.                 if (document.getRepairDocumentType().getTitle().equals("Калькуляция РДВ")){
  2191.                     repairSum = document.getAmount();
  2192.                 } else if (document.getRepairDocumentType().getTitle().equals("Акт ПП товарно-материальных ценностей")){
  2193.                     goods = document.getAmount();
  2194.                 } else if (document.getRepairDocumentType().getTitle().equals("Счет окончательный")){
  2195.                     finalInvoice = document.getAmount();
  2196.                 }
  2197.                 if (repairSum != null && goods != null && finalInvoice != null) break;
  2198.             }
  2199.         }
  2200.         if (repairSum != null && goods != null) repairSum -= goods;
  2201.         if (repairSum == null) defectsRepairSum.setValue(null);//defectsRepairSum.clear();
  2202.         else defectsRepairSum.setValue(Float.toString(repairSum));
  2203.  
  2204.         partsFieldSet.setRepairSum(repairSum);
  2205.  
  2206.         if (provisionalInvoiceAmount.getValue() == null || finalInvoice == null) defectsTotalSaveSum.setValue(null);//defectsTotalSaveSum.clear();
  2207.         else defectsTotalSaveSum.setValue(Float.toString(provisionalInvoiceAmount.getValue() - finalInvoice));
  2208.     }
  2209.  
  2210.     private void recalculateDefectReadOnlyOtherFields(){
  2211.  
  2212.         Float repairSum = defectsRepairSum.getValue() == null ? null : Float.parseFloat(defectsRepairSum.getValue());
  2213.         Float defectsSum = null;
  2214.  
  2215.         if (repairSum != null && repairDefects != null && repairDefects.getStore() != null){
  2216.             for (RepairDefectProxy defect : repairDefects.getStore().getAll()){
  2217.                 if (defect.getCost() != null){
  2218.                     defectsSum = defectsSum == null ? defect.getCost() : defectsSum + defect.getCost();
  2219.                 }
  2220.             }
  2221.         }
  2222.  
  2223.         if (repairSum == null) {
  2224.             defectsWorkSum.setValue(null);
  2225.             defectsTotalSumWithoutTaxes.setValue(null);
  2226.             defectsTotalSumTaxes.setValue(null);
  2227.             defectsTotalSumWithTaxes.setValue(null);
  2228. //            defectsWorkSum.clear();
  2229. //            defectsTotalSumWithoutTaxes.clear();
  2230. //            defectsTotalSumTaxes.clear();
  2231. //            defectsTotalSumWithTaxes.clear();
  2232.         }
  2233.         else {
  2234.             defectsWorkSum.setValue(Float.toString(defectsSum == null ? repairSum : repairSum - defectsSum));
  2235.             defectsTotalSumWithoutTaxes.setValue(Float.toString(repairSum));
  2236.             defectsTotalSumTaxes.setValue(Float.toString(repairSum * 0.18f));
  2237.             defectsTotalSumWithTaxes.setValue(Float.toString(repairSum * 1.18f));
  2238.         }
  2239.     }
  2240.  
  2241.     private void recalculateDefectReadOnlyFields(){
  2242.         recalculateDefectReadOnlyDocumentFields();
  2243.         recalculateDefectReadOnlyOtherFields();
  2244.     }
  2245.  
  2246.     private class RepairDocTypePanel extends HBoxLayoutContainer {
  2247.         private RepairDocumentTypeProxy repairDocumentType;
  2248.  
  2249.         private RepairDocumentProxy document;
  2250.         private CheckBox checkBox = new CheckBox();
  2251.         private Boolean planned;
  2252.         private Long excludeID;
  2253.  
  2254.         private DateField original =  new DateField(dateTimeProperty);
  2255.         private DateField electronic =  new DateField(dateTimeProperty);
  2256.         private TextField number = new TextField();
  2257.         private FloatField amount = new FloatField();
  2258.         private FloatField weight = new FloatField();
  2259.         private DateField date =  new DateField(dateTimeProperty);
  2260.  
  2261.         private com.sencha.gxt.widget.core.client.button.ToggleButton button =
  2262.                 new com.sencha.gxt.widget.core.client.button.ToggleButton("Показать");
  2263.  
  2264.         public int getTypeId(){
  2265.             return repairDocumentType.getTypeID();
  2266.         }
  2267.         public RepairDocumentProxy getDocument(){
  2268.             if (document == null && context != null) {
  2269.                 document = context.create(RepairDocumentProxy.class);
  2270.                 document.setGuid(Long.toString((new Date()).getTime()));
  2271.                 document.setRepairDocumentType(repairDocumentType);
  2272.             }
  2273.             return document;
  2274.         }
  2275.  
  2276.         public void resetDocument(RepairDocumentProxy document){
  2277.             button.setValue(false);
  2278.             button.setText("Показать");
  2279.             if (document != null) {
  2280.                 enableFields(true);
  2281.                 this.document = document;
  2282.                 original.setValue(document.getDocumentOriginalDate());
  2283.                 original.setAllowBlank(document != null && document.getDocumentElectronicDate() != null);
  2284.                 electronic.setValue(document.getDocumentElectronicDate());
  2285.                 electronic.setAllowBlank(document != null && document.getDocumentOriginalDate() != null);
  2286.                 number.setValue(document.getNumber());
  2287.                 amount.setValue(document.getAmount());
  2288.                 weight.setValue(document.getWeight());
  2289.                 date.setValue(document.getDocumentDate());
  2290.                 checkBox.setValue(true);
  2291.  
  2292.                 if (document.getRepairDocumentType().getTitle().equals("Счет-фактура")) {
  2293.                     if (document.getNumber() != null) invoiceNumber.setValue(document.getNumber());
  2294.                     else invoiceNumber.clear();
  2295.                     if (document.getDocumentDate() != null) invoiceLoadDate.setValue(document.getDocumentDate());
  2296.                     else invoiceLoadDate.clear();
  2297.                     if (document.getAmount() != null) invoiceAmount.setValue(document.getAmount());
  2298.                     else invoiceAmount.clear();
  2299.                 } else if (document.getRepairDocumentType().getTitle().equals("ВУ-41")){
  2300.                     if (document.getAmount() != null) vu41TextField.setValue(Float.toString(document.getAmount()));
  2301.                     else vu41TextField.clear();
  2302.                 } else if (document.getRepairDocumentType().getTitle().equals("Акт повреждения вагона ВУ-25")){
  2303.                     if (document.getAmount() != null) vu25TextField.setValue(Float.toString(document.getAmount()));
  2304.                     else vu25TextField.clear();
  2305.                 }
  2306.             } else {
  2307.                 this.document = null;
  2308.                 original.clear();
  2309.                 electronic.clear();
  2310.                 number.clear();
  2311.                 amount.clear();
  2312.                 weight.clear();
  2313.                 date.clear();
  2314.                 checkBox.clear();
  2315.                 enableFields(false);
  2316.            }
  2317.         }
  2318.  
  2319.         public boolean isCurrent(){
  2320.             return planned == null || !planned;
  2321.         }
  2322.  
  2323.         public boolean isPlanned(){
  2324.             return planned == null || planned;
  2325.         }
  2326.  
  2327.         public RepairDocTypePanel(RepairDocumentTypeProxy documentType){
  2328.             repairDocumentType = documentType;
  2329.             planned = documentType.getIsPlanned();
  2330.             excludeID = documentType.getExcludeId();
  2331.             FlowPanel labelPanel = new FlowPanel();
  2332.             Label label = new Label(documentType.getTitle());
  2333.             FlowPanel checkPanel = new FlowPanel();
  2334.             FlowPanel originalPanel = new FlowPanel();
  2335.             FlowPanel electronicPanel = new FlowPanel();
  2336.             FlowPanel amountPanel = new FlowPanel();
  2337.             FlowPanel datePanel = new FlowPanel();
  2338.  
  2339.             original.setEnabled(false);
  2340.             original.setAllowBlank(getDocument() != null && getDocument().getDocumentElectronicDate() != null);
  2341.             original.addValueChangeHandler(new ValueChangeHandler<Date>() {
  2342.                 @Override
  2343.                 public void onValueChange(ValueChangeEvent<Date> event) {
  2344.                     getDocument().setDocumentOriginalDate(event.getValue());
  2345.                     electronic.setAllowBlank(event.getValue() != null);
  2346.                     electronic.clearInvalid();
  2347.                 }
  2348.             });
  2349.  
  2350.             electronic.setEnabled(false);
  2351.             electronic.setAllowBlank(getDocument() != null && getDocument().getDocumentOriginalDate() != null);
  2352.             FlowPanel numberPanel = new FlowPanel();
  2353.             electronic.addValueChangeHandler(new ValueChangeHandler<Date>() {
  2354.                 @Override
  2355.                 public void onValueChange(ValueChangeEvent<Date> event) {
  2356.                     getDocument().setDocumentElectronicDate(event.getValue());
  2357.                     original.setAllowBlank(event.getValue() != null);
  2358.                     original.clearInvalid();
  2359.                 }
  2360.             });
  2361.             number.setEnabled(false);
  2362.             number.setAllowBlank(false);
  2363.             number.addValueChangeHandler(new ValueChangeHandler<String>() {
  2364.                 @Override
  2365.                 public void onValueChange(ValueChangeEvent<String> event) {
  2366.                     getDocument().setNumber(event.getValue());
  2367.                 }
  2368.             });
  2369.  
  2370.             amount.setEnabled(false);
  2371.             amount.setAllowBlank(false);
  2372.             amount.addValueChangeHandler(new ValueChangeHandler<Float>() {
  2373.                 @Override
  2374.                 public void onValueChange(ValueChangeEvent<Float> event) {
  2375.                     getDocument().setAmount(event.getValue());
  2376.                     recalculateDefectReadOnlyFields();
  2377.                 }
  2378.             });
  2379.             date.setAllowBlank(false);
  2380.             date.setEnabled(false);
  2381.             date.addValueChangeHandler(new ValueChangeHandler<Date>() {
  2382.                 @Override
  2383.                 public void onValueChange(ValueChangeEvent<Date> event) {
  2384.                     getDocument().setDocumentDate(event.getValue());
  2385.                 }
  2386.             });
  2387.             weight.setAllowBlank(false);
  2388.             weight.setEnabled(false);
  2389.             weight.addValueChangeHandler(new ValueChangeHandler<Float>() {
  2390.                 @Override
  2391.                 public void onValueChange(ValueChangeEvent<Float> event) {
  2392.                     getDocument().setWeight(event.getValue());
  2393.                 }
  2394.             });
  2395.  
  2396.  
  2397.             button.setWidth("100px");
  2398.             button.setEnabled(false);
  2399.             labelPanel.setWidth("150px");
  2400.             checkPanel.setWidth("55px");
  2401.             original.setWidth(100);
  2402.             originalPanel.setWidth("105px");
  2403.             electronic.setWidth(100);
  2404.             electronicPanel.setWidth("105px");
  2405.             number.setWidth(100);
  2406.             numberPanel.setWidth("105px");
  2407.             date.setWidth(100);
  2408.             datePanel.setWidth("105px");
  2409.             amount.setWidth(100);
  2410.             amountPanel.setWidth("105px");
  2411.             weight.setWidth(100);
  2412.             labelPanel.add(label);
  2413.             checkPanel.add(checkBox);
  2414.             originalPanel.add(original);
  2415.             electronicPanel.add(electronic);
  2416.             if (documentType.getTypeID()<7){
  2417.                 if (documentType.getTypeID() > 4 ) {
  2418.                     amountPanel.add(button);
  2419.                     if (documentType.getTypeID() == 5) {
  2420.                         button.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
  2421.                             @Override
  2422.                             public void onValueChange(ValueChangeEvent<Boolean> event) {
  2423.                                 if (event.getValue()) {
  2424.                                     vu53Container.show();
  2425.                                     button.setText("Скрыть");
  2426.                                 } else {
  2427.                                     vu53Container.hide();
  2428.                                     button.setText("Показать");
  2429.                                 }
  2430.                             }
  2431.                         });
  2432.                     } else if (documentType.getTypeID() == 6) {
  2433.                         button.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
  2434.                             @Override
  2435.                             public void onValueChange(ValueChangeEvent<Boolean> event) {
  2436.                                 if (event.getValue()) {
  2437.                                     listCompletionContainer.show();
  2438.                                     button.setText("Скрыть");
  2439.                                 } else {
  2440.                                     listCompletionContainer.hide();
  2441.                                     button.setText("Показать");
  2442.                                 }
  2443.                             }
  2444.                         });
  2445.                     }
  2446.                 }
  2447.                 else {
  2448.                     amountPanel.add(amount);
  2449.                     if (documentType.getTitle().equals("ВУ-41")){
  2450.                         amount.addValueChangeHandler(new ValueChangeHandler<Float>() {
  2451.                             @Override
  2452.                             public void onValueChange(ValueChangeEvent<Float> event) {
  2453.                                 vu41TextField.setValue(Float.toString(event.getValue()));
  2454.                             }
  2455.                         });
  2456.                     } else if (documentType.getTitle().equals("Акт повреждения вагона ВУ-25")){
  2457.                         amount.addValueChangeHandler(new ValueChangeHandler<Float>() {
  2458.                             @Override
  2459.                             public void onValueChange(ValueChangeEvent<Float> event) {
  2460.                                 vu25TextField.setValue(Float.toString(event.getValue()));
  2461.                             }
  2462.                         });
  2463.                     }
  2464.  
  2465.                     if (documentType.getTypeID() > 2){
  2466.                         numberPanel.add(weight);
  2467.                     }
  2468.                     else if (documentType.getTypeID() == 1) {
  2469.                         numberPanel.add(number);
  2470.                         datePanel.add(date);
  2471.                         if (documentType.getTitle().equals("Счет-фактура")) {
  2472.                             amount.addValueChangeHandler(new ValueChangeHandler<Float>() {
  2473.                                 @Override
  2474.                                 public void onValueChange(ValueChangeEvent<Float> event) {
  2475.                                     fillDebitCreditFields(repairDocuments.getStore().getAll(), payments.getStore().getAll());
  2476.                                     invoiceAmount.setValue(event.getValue());
  2477.                                 }
  2478.                             });
  2479.                             date.addValueChangeHandler(new ValueChangeHandler<Date>() {
  2480.                                 @Override
  2481.                                 public void onValueChange(ValueChangeEvent<Date> event) {
  2482.                                     invoiceLoadDate.setValue(event.getValue());
  2483.                                 }
  2484.                             });
  2485.                             number.addValueChangeHandler(new ValueChangeHandler<String>() {
  2486.                                 @Override
  2487.                                 public void onValueChange(ValueChangeEvent<String> event) {
  2488.                                     invoiceNumber.setValue(event.getValue());
  2489.                                 }
  2490.                             });
  2491.                         }
  2492.                     }
  2493.                 }
  2494.             }
  2495.             add(labelPanel);
  2496.             add(checkPanel);
  2497.             add(electronicPanel);
  2498.             add(originalPanel);
  2499.             add(amountPanel);
  2500.             add(numberPanel);
  2501.             add(datePanel);
  2502.  
  2503.  
  2504.             checkBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
  2505.                 @Override
  2506.                 public void onValueChange(ValueChangeEvent<Boolean> event) {
  2507.                     enableFields(event.getValue());
  2508.                     if (event.getValue()){
  2509.                         repairDocuments.getStore().add(getDocument());
  2510.                     } else {
  2511.                         repairDocuments.getStore().remove(getDocument());
  2512.                         recalculateDefectReadOnlyFields();
  2513.                         original.clearInvalid();
  2514.                         electronic.clearInvalid();
  2515.                         number.clearInvalid();
  2516.                         amount.clearInvalid();
  2517.                         weight.clearInvalid();
  2518.                         date.clearInvalid();
  2519.                     }
  2520.                 }
  2521.             });
  2522.  
  2523.         }
  2524.  
  2525.         private void enableFields(boolean enable){
  2526.             date.setEnabled(enable);
  2527.             number.setEnabled(enable);
  2528.             amount.setEnabled(enable);
  2529.             weight.setEnabled(enable);
  2530.             original.setEnabled(enable);
  2531.             electronic.setEnabled(enable);
  2532.             button.setEnabled(enable);
  2533.             if (excludeID != null) repairDocTypePanels.get(excludeID).setEnabled(!enable);
  2534.         }
  2535.  
  2536.         public boolean hasErrors(){
  2537.             boolean result = false;
  2538.             if (checkBox.getValue()){
  2539.                 result |= !(original.getParent() == null || original.isCurrentValid());
  2540.                 result |= !(electronic.getParent() == null || electronic.isCurrentValid());
  2541.                 result |= !(number.getParent() == null || number.isCurrentValid());
  2542.                 result |= !(amount.getParent() == null || amount.isCurrentValid());
  2543.                 result |= !(weight.getParent() == null || weight.isCurrentValid());
  2544.                 result |= !(date.getParent() == null || date.isCurrentValid());
  2545.             }
  2546.             return result;
  2547.         }
  2548.     }
  2549.  
  2550.     private SummaryColumnConfig getDateColumnConfig(ValueProvider valueProvider, int size, String columnHeader){
  2551.         SummaryColumnConfig columnConfig = new SummaryColumnConfig<RepairProxy, Date>(valueProvider, size, columnHeader);
  2552.         columnConfig.setCell(dateCell);
  2553.         columnConfig.setAlignment(HasHorizontalAlignment.ALIGN_CENTER);
  2554.         return columnConfig;
  2555.     }
  2556.  
  2557.     private SummaryColumnConfig<PaymentProxy, ?> getPaymentRepairCarNumber(ValueProvider valueProvider){
  2558.  
  2559.         Cell nc =  new AbstractCell<List<RepairProxy>>() {
  2560.             @Override
  2561.             public void render(Context context, List<RepairProxy> value, SafeHtmlBuilder sb) {
  2562.                 String number = null;
  2563.                 for (RepairProxy repairProxy: value){
  2564.                     if (number == null) number = repairProxy.getCar().getNumber();
  2565.                     else number += ", " + repairProxy.getCar().getNumber();
  2566.                 }
  2567.                 if (number != null) sb.appendEscapedLines(number);
  2568.             }
  2569.         };
  2570.  
  2571.         SummaryColumnConfig<PaymentProxy, ?> columnConfigNumber = new SummaryColumnConfig(valueProvider,100, "Оплаченные вагоны");
  2572.         columnConfigNumber.setSortable(false);
  2573.         columnConfigNumber.setCell(nc);
  2574.         return columnConfigNumber;
  2575.     }
  2576.  
  2577.     private NumberField getCompletionNumberFieldForEditor(AbstractValidator validator, NumberPropertyEditor propertyEditor){
  2578.         final NumberField numberField = new NumberField(propertyEditor);
  2579.         numberField.addValidator(validator);
  2580.         numberField.setAutoValidate(true);
  2581.         return numberField;
  2582.     }
  2583.  
  2584.     @Override
  2585.     public boolean isValid() {
  2586.         driver.flush();
  2587.         boolean result = driver.hasErrors();
  2588.         result |= partsFieldSet.hasErrors();
  2589.         for (RepairDocTypePanel panel : repairDocTypePanels.values()) result |= panel.hasErrors();
  2590.         for (ListStore<CompletionRecordProxy> listStore : completionCheckerList.keySet()){
  2591.             if (result) break;
  2592.             List<CompletionChecker> list = completionCheckerList.get(listStore);
  2593.             if (list.size() >0)
  2594.             {
  2595.                 for (CompletionRecordProxy proxy :listStore.getAll()){
  2596.                     if (result) break;
  2597.                     boolean firstIsNull = list.get(0).check(proxy);
  2598.                     for (CompletionChecker checker : list){
  2599.                         if (checker.check(proxy) != firstIsNull){
  2600.                             result = true;
  2601.                             break;
  2602.                         }
  2603.                     }
  2604.                 }
  2605.             }
  2606.         }
  2607.         return !result;
  2608.     }
  2609.  
  2610.  
  2611.  
  2612.     // Class to provide common/simple errors from custom validators
  2613.     private class SimpleEditorError extends MockEditorError {
  2614.         Editor<?> editor;
  2615.         String message;
  2616.         Object value;
  2617.  
  2618.         public SimpleEditorError(Editor<?> editor, Object value, String message) {
  2619.             super();
  2620.             this.editor = editor;
  2621.             this.value = value;
  2622.             this.message = message;
  2623.         }
  2624.  
  2625.         @Override
  2626.         public Editor<?> getEditor() {
  2627.             return editor;
  2628.         }
  2629.  
  2630.         @Override
  2631.         public String getMessage() {
  2632.             return message;
  2633.         }
  2634.  
  2635.         @Override
  2636.         public Object getValue() {
  2637.             return value;
  2638.         }
  2639.  
  2640.         @Override
  2641.         public boolean isConsumed() {
  2642.             return true;
  2643.         }
  2644.     }
  2645. // ----------------------------------------
  2646. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement