PushEVSEData(this ICPOClient                 CPOClient,
                         IEnumerable<EVSEDataRecord>     EVSEDataRecords,
                         Operator_Id                     OperatorId,
                         String                          OperatorName,
                         ActionTypes                     Action                   = ActionTypes.FullLoad,
                         IncludeEVSEDataRecordsDelegate  IncludeEVSEDataRecords   = null,

                         DateTime?                       Timestamp                = null,
                         CancellationToken?              CancellationToken        = null,
                         EventTracking_Id                EventTrackingId          = null,
                         TimeSpan?                       RequestTimeout           = null)


                => CPOClient.PushEVSEData(
                       new PushEVSEDataRequest(
                           new OperatorEVSEData(IncludeEVSEDataRecords != null
                                                    ? EVSEDataRecords.Where(evsedatarecord => IncludeEVSEDataRecords(evsedatarecord))
                                                    : EVSEDataRecords,
                                                OperatorId,
                                                OperatorName),
                           Action,

                           Timestamp,
                           CancellationToken,
                           EventTrackingId,
                           RequestTimeout ?? CPOClient.RequestTimeout));
        PushEVSEData(this ICPOClient ICPOClient,
                     Operator_Id OperatorId,
                     ActionTypes Action,
                     params EVSEDataRecord[]  EVSEDataRecords)


        => ICPOClient.PushEVSEData(new PushEVSEDataRequest(new OperatorEVSEData(EVSEDataRecords,
                                                                                OperatorId),
                                                           Action:          Action,

                                                           RequestTimeout:  ICPOClient.RequestTimeout));
            PushEVSEData(this ICPOClient          CPOClient,
                         Operator_Id              OperatorId,
                         String                   OperatorName,
                         ActionTypes              Action,
                         params EVSEDataRecord[]  EVSEDataRecords)


            => CPOClient.PushEVSEData(
                   new PushEVSEDataRequest(
                       new OperatorEVSEData(
                           EVSEDataRecords,
                           OperatorId,
                           OperatorName
                       ),
                       Action,
                       RequestTimeout: CPOClient.RequestTimeout));
        PushEVSEData(this ICPOClient ICPOClient,
                     OperatorEVSEData OperatorEVSEData,
                     ActionTypes Action = ActionTypes.fullLoad,

                     DateTime?Timestamp = null,
                     CancellationToken?CancellationToken = null,
                     EventTracking_Id EventTrackingId    = null,
                     TimeSpan?RequestTimeout             = null)


        => ICPOClient.PushEVSEData(new PushEVSEDataRequest(OperatorEVSEData,
                                                           Action,

                                                           Timestamp,
                                                           CancellationToken,
                                                           EventTrackingId,
                                                           RequestTimeout ?? ICPOClient.RequestTimeout));
        PushEVSEData(this ICPOClient ICPOClient,
                     EVSEDataRecord EVSEDataRecord,
                     Operator_Id OperatorId,
                     String OperatorName = null,
                     ActionTypes Action  = ActionTypes.insert,

                     DateTime?Timestamp = null,
                     CancellationToken?CancellationToken = null,
                     EventTracking_Id EventTrackingId    = null,
                     TimeSpan?RequestTimeout             = null)


        => ICPOClient.PushEVSEData(new PushEVSEDataRequest(new OperatorEVSEData(new EVSEDataRecord[] { EVSEDataRecord },
                                                                                OperatorId,
                                                                                OperatorName),
                                                           Action,

                                                           Timestamp,
                                                           CancellationToken,
                                                           EventTrackingId,
                                                           RequestTimeout ?? ICPOClient.RequestTimeout));