private void save(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(
                (Integer)dateReceivedYearField.getSelectedItem(),
                (Integer)dateReceivedMonthField.getSelectedItem()-1,
                (Integer)dateReceivedDayField.getSelectedItem(),
                (Integer)dateReceivedHourField.getSelectedItem(),
                (Integer)dateReceivedMinuteField.getSelectedItem()
        );
        call.setDateReceived(calendar.getTime());

        calendar.set(
                (Integer)datePassedYearField.getSelectedItem(),
                (Integer)datePassedMonthField.getSelectedItem()-1,
                (Integer)datePassedDayField.getSelectedItem(),
                (Integer)datePassedHourField.getSelectedItem(),
                (Integer)datePassedMinuteField.getSelectedItem()
        );
        if(call.getDateReceived().before(calendar.getTime())){
            call.setDatePassed(calendar.getTime());
        }else{
            call.setDatePassed(null);
        }

        call.setCallerName(callerNameField.getText());
        if(call.getWorker() == null){
            JOptionPane.showMessageDialog(this, "Не установлен работник принявший вызов!");
            return;
        }

        Address address = new Address(
                ((Subject)addressStreetField.getSelectedItem()).getCode(),
                addressHouseField.getText(),
                addressAptField.getText()
        );
        call.setAddress(address);

        if(call.getPatient() == null){
            JOptionPane.showMessageDialog(this, "Не выбран пациент!");
            return;
        }

        call.setComplaints(complaintField.getText());
        call.setComments(commentsField.getText());
        call.setDiacrisis(diacrisisField.getText());
        call.setResult(resultField.getText());

        if(call.getCrew() == null){
            JOptionPane.showMessageDialog(this, "Не выбрана бригада скорой помощи!");
            return;
        }

        calendar.set(
                (Integer)crewStartDateYearField.getSelectedItem(),
                (Integer)crewStartDateMonthField.getSelectedItem()-1,
                (Integer)crewStartDateDayField.getSelectedItem(),
                (Integer)crewStartDateHourField.getSelectedItem(),
                (Integer)crewStartDateMinuteField.getSelectedItem()
        );
        call.setCrewStartTime(calendar.getTime());
        calendar.set(
                (Integer)crewOffDateYearField.getSelectedItem(),
                (Integer)crewOffDateMonthField.getSelectedItem()-1,
                (Integer)crewOffDateDayField.getSelectedItem(),
                (Integer)crewOffDateHourField.getSelectedItem(),
                (Integer)crewOffDateMinuteField.getSelectedItem()
        );
        call.setCrewOffTime(calendar.getTime());
        calendar.set(
                (Integer)crewArrivalDateYearField.getSelectedItem(),
                (Integer)crewArrivalDateMonthField.getSelectedItem()-1,
                (Integer)crewArrivalDateDayField.getSelectedItem(),
                (Integer)crewArrivalDateHourField.getSelectedItem(),
                (Integer)crewArrivalDateMinuteField.getSelectedItem()
        );
        call.setCrewArrivalTime(calendar.getTime());

        if(call.getCallReason() == null){
            JOptionPane.showMessageDialog(
                    this,
                    "Не указана причина вызова!"
            );
            return;
        }

        if(call.getCallType() == null){
            JOptionPane.showMessageDialog(
                    this,
                    "Не указан тип вызова!"
            );
        }
        call.save();
        JOptionPane.showMessageDialog(this, "Вызов сохранён!");
        this.cancel();
    }